Foco de los combos

Ojala me puedas ayudar mira tengo el siguiente problema
Tengo un formulario mediante este formulario el usuario escoge los valores que quiere de unos combos los cuales (los combos) son modificados por medio de javascript dependiendo lo que el usuario vaya escogiendo y de ahí le da aceptar al darle aceptar este le devuelve el resultado espeerado pero el problema lo tengo acá cuando el usuario le da al botón regresar los valores del combo no son los originales y lo que quiero es que mande los valores que mando por default al principio de la página de hecho si lo manda pero como que el foco lo toma la posición no1 no la 0 y me muestra un valor que no me debe de mostrrar como le puedo hacer

3 Respuestas

Respuesta
1
Escribime el código con el que llenás los combos dinámicamente por javascript así veo bien que modificación hacerle.
Atentamente. Manuel Fernández.
Mira este es el código script que ejecuto lógicamente inicio con valores por default y cuando elijo un combo mando a llamar estos valores scripts después llamo a una archivo para generar la consulta cuando le doy atrás los valores en los combos se pierden y quiero que estén los valores por default si me puedes ayudar te lo agradeceré
//funcion de listas enlazadas para agregar la entidad
function estadow(objeto,valor)
{
//limpiamos la lista
objeto.options.length=0;
consecutivo=0;
//agregamos el primero REGISTRO de la lista
var option_uno = new Option("-Seleccionar-","0");
objeto.options[consecutivo++]=option_uno;
//Generamos la consulta
<%
String x= "SELECT DISTINCT a.ambito||a.entidad as ambito,a.entidad,decode(a.ambito,'1',' Central','2',' Regional','3',' Estatal') as amb FROM tr_computo a,tc_entidades b where a.entidad=b.entidad";
PreparedStatement Statementlissta = Conn.prepareStatement(x);
ResultSet lissta = Statementlissta.executeQuery();
%>
<% while (lissta.next()){%>
//comparamos el valor que se selecciono en la primer lista para agregarlo
if (valor==<%=lissta.getObject("entidad")%>)
//se agrega los valores (valor visible, valor invisible)
{
var option_uno = new Option('<%=lissta.getObject("amb")%>','<%=lissta.getObject("ambito")%>');
objeto.options[consecutivo++]=option_uno;
}
<%}%>
}
//funcion para generar la lista de los deptos
function depto(objeto,valor)
{
objeto.options.length=0;
consecutivo=0;
var option_uno = new Option("-Todas-","0");
objeto.options[consecutivo++]=option_uno;
<% String nreg ="0";
String space="";
%>
<%String Y="select distinct c.ambito||a.entidad as ambito,b.entidad,a.descripcion, a.clave_adsc_func as clave, c.ambito from tc_est_funcional a, entidades b, tr_computo c, tc_carac_tec_pcsvpp d where a.entidad=b.entidad and b.entidad=c.entidad and a.clave_adsc_func=c.clave_adsc_func and d.cve_modelo=c.cve_modelo and c.cve_tipo='100' order by a.clave_adsc_func";
PreparedStatement lista = Conn.prepareStatement(Y);
ResultSet lis = lista.executeQuery();
%>
<% while (lis.next()){%>
if (valor==<%=lis.getString(1)%>)
{
<% if (lis.getString(4).substring(10,lis.getString(4).length()).equals("0000") && !lis.getString(4).substring(4,lis.getString(4).length()).equals("0000000000")){
space=" ";
}else if (lis.getString(4).substring(12,lis.getString(4).length()).equals("00") && !lis.getString(4).substring(11,lis.getString(4).length()-2).equals("0")) {
space=" ";
}else if (!lis.getString(4).substring(12,lis.getString(4).length()).equals("00")) {
space=" ";
}else{
space="";
}%>
var option_uno = new Option('<%=space+lis.getString(3)%>','<%=lis.getString(4)%>');
objeto.options[consecutivo++]=option_uno;
}
<% } %>
}
</script>
Lo más sencillo que se me ocurre para decirte que hagas, a parte del código que me mandaste, es poner, una vez cargado el combo lo siguiente:
nombre_del_combo.options[0].selected=true;
no puse el nombre del combo porque realmente no estaba seguro de cual era el correcto.
A decir verdad es la primera vez que veo esta forma de cargar un combo dinámicamente, yo hubiera usado el método options.add(elemento, indice);
y para borrarlo y cargarlo de nuevo, inicialmente intentaría sobreescribir y si esto no funcionase probaría con un bucle desde el primero hasta el último option y usaría el método options.remove(indice);
Pero en fin, si todo lo demás te funcionó, con el fragmento de código que te mencioné debería funcionar.
En el peor de los casos tendrás que ponerlo en el evento onLoad del body así cuando se termina de cargar el cuerpo, el combo toma la posición 0 como seleccionada por defecto. Y esto cada vez que se cargue la página, incluyendo cuando se vuelva hacia atrás, valga la redundancia.
Atentamente. Manuel Fernández.
Ok lo probare y te confirmare si funciona, te digo la verdad estoy empezando a programas por eso programo así je je pero si me puedes ayudar a mejorar mi programación te lo agradeceré digo un manual o algo así
De todos modos gracias
Respuesta
1
¿Te refieres a que cuando se vuelve atrás a la página los valores se han perdido?
Al modificarse por javascript es normal que los valores se pierdan, porque el javascript no se ejecuta al volver para que lo deje como estaba...
Tal vez puedas modificar el código de vuelta atrás para que en lugar de hacer un history. Back() envíes los datos necesarios para volver a ejecutar el javascript y te ponga los datos previos.
Para ellos debes recoger los parámetros en la página y, si te llegan, ejecutar el javascript con los valores recibidos.
Si exactamente a eso me refiero, pero mira si pinta los valores por default pero por alguna razón el foco esta en donde no debe de estar osea esta un registro más a bajo del primero y logicamante el valor que aparece no es el primero entonces eso es lo que quiero decirle que por default aparezca el primer valor del combo espero me puedas ayudar
Gracias
Lo que debes hacer es enviarle a la página los valores seleccionados y poner un "selected" en el option cuyo valor coincida con el valor recibido.
Si quieres que siempre tenga un mismo valor seleccionado puedes hacer un reset del formulario cada vez que se cargue la página, pero creo que no es esto lo que quieres, ¿no? Quieres que está marcada la opción previamente elegida, ¿no?
Respuesta
-1
Siento no haber respondido antes, no he podido mirar mi cuenta porque he tenido mucho lio, si sigues con la duda, coméntamelo e intentare ayudarte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas