Iep amigo, gracias por contestar...
Voy a tratar de explicar mejor el tema, aunque la respuesta que me das no me induce mucho a solucion, ya que los eval estan (creo) perfectamente justificados.
Espero que no te moleste que por ahorrar tiempo (ese bien tan preciado) haga un pasteo de la misma cuestion en otra lista. Donde si que especifique mas las cosas.
Ahi va:
Estoy tratando de montar un par de combos dependientes que tienen que
recuperar la informacion que se selecciono previamente.
El combo01 lo monto mediante una funcion ASP de la siguiente forma:
---------------------
Código:
function crear_select_grp_eq(grp_eq_selected)
Set rg = CreateObject("ADODB.Recordset")
rg.CursorType = adOpenStatic
rg.LockType = adLockOptimistic
sql="select * from tb_eq_grupos order by eq_grupo_id"
rg.Open sql, conexion_bd
aux="<select name='grp_eq' style='width:120;'
onchange=create_select_eq('document.form_eq.grp_eq','document.form_eq.lista_eq',EQIDs_values,EQIDs_values)>"
if grp_eq_selected="" then
aux=aux & "<option value='0' selected>Todos</option>"
else
aux=aux & "<option value='0'>Todos</option>"
end if
if not rg.eof then
while not rg.eof
if cint(grp_eq_selected) = cint(rg("eq_grupo_id")) then
aux = aux & "<option value='" & rg("eq_grupo_id") &"' selected>" &
rg("eq_grupo_nombre") & "</option>"
else
aux = aux & "<option value='" & rg("eq_grupo_id") &"'>" &
rg("eq_grupo_nombre") & "</option>"
end if
rg.movenext
wend
end if
aux = aux & "</select>"
crear_select_grp_eq=aux
end function
--------------------------------
Por lo que recupera perfectamente el valor seleccionado en el form.
Ahora, el segundo combo lo monto con javascript, ya que los valores dependen
de la seleccion que se hizo en el primer combo.
Por una parte, mediante ASP genero el vector de datos javascript de esta
forma:
----------------------------------
Código:
function montar_vector_grupos_eq()
Dim rs_eq
Dim sql
Dim grp_eq
Dim grp_eq_old
grp_eq_old=""
'abrimos un recordset para la consulta
Set rs_eq = CreateObject("ADODB.Recordset")
rs_eq.CursorType = adOpenStatic
rs_eq.LockType = adLockOptimistic
'consulta
sql="select * from TB_EQ,TB_EQ_GRUPOS where EQ_GRUPO_CL=EQ_GRUPO_ID order
by eq_grupo_id"
'ejecutamos la consulta con la conexvion conexion_bd
rs_eq.Open sql,conexion_bd
'response.write sql
'control de errores
if rs_eq.EOF then
rs_eq.Close
set rs_eq=nothing
call gestionar_error_mantenimiento("2002","SQL:" & sql,"")
else
'si la consulta tuvo exito tratamos los datos
'montar un vector javascript del pais como indice y sus destinos como
componentes del vector
response.write ("<script language='javascript'>")
response.write("EQIDs_values=[")
while not rs_eq.EOF
grp_eq=rs_eq("eq_grupo_id")
if not grp_eq=grp_eq_old then 'si no es el mismo pais creamos el vector
response.write ("['Todos',")
grp_eq_old=grp_eq
end if
response.write ("'"&rs_eq("eq_id")&"'")
rs_eq.movenext
if rs_eq.EOF then
response.write("]];")
else
'Para el mismo pais separamos los destinos con ,
if rs_eq("eq_grupo_id")=grp_eq_old then
response.write(",")
else 'si el pais es diferente cerramos el vector
response.write ("],")
end if
end if
wend
'se cierra el script
response.write ("</script>")
end if
rs_eq.Close
set rs_eq=nothing
end function
----------------------------------
Por lo que tengo el vector en la pagina con los datos que deben rellenar el
segundo vector:
Código:
EQIDs_values=[['Todos','3','4'],['Todos','5','6','7'],['Todos','8','9'],['Todos','10']];
===>> Ahora el problema <<===
Cuando se somete el formulario habiendo hecho una seleccion en el combo
principal, llamo a la funcion javascript para que cargue los datos en el
combo con la seleccion que se hizo, pero no consigo hacer que recupere la
seleccion en el segundo combo.
----------
Código:
<%
if listado_grp_eq <> 0 then
%>
<script language="javascript">
create_select_eq('document.form_eq.grp_eq','document.form_eq.lista_eq',EQIDs_values,EQIDs_values,'<%=trim(listado_eq_id)%>');
</script>
<%
end if
%>
-----------
La funcion que rellena el segundo COMBO en javascript es la sigueinte, y es
donde esta el meollo.
Paso por parametro la seleccion que se hizo del segundo combo, y al crear
los options dinamicamente, miro si es el que corresponde con la seleccion
para crearlo de la forma [new Option("name","valor",true);] o [new
Option("name","valor");] si no fue seleccionado.
Código:
function create_select_eq(idSelect_to_query,idSelect_to_modify,values,names,selected) {
var indice=eval(idSelect_to_query+'.selectedIndex');
var aux;
if (indice == 0) {
aux = new Option("---",'-1');
eval(idSelect_to_modify+'.length=1');
eval(idSelect_to_modify+'.options[0] ='+aux);
}
else {
indice--;
eval(idSelect_to_modify + '.options.length=0');
for (var i=0;i<=values[indice].length-1;i++) {
if (selected == values[indice][i]) {
aux = eval('new Option(\'' + names[indice][i] + '\',\'' + values[indice][i] + '\',true' + ')');
}
else {
aux = eval('new Option(\'' + names[indice][i] + '\',\'' + values[indice][i] + '\')');
}
eval(idSelect_to_modify + '.options[' + i + ']=aux');
}
}
}
Pero desafortunadamente no me recupera la seleccion del segundo combo con el IE, que es el que por desgracia mia y de la comunidad se usara....
En IE me pone los datos que corresponden con la seleccion del primer COMBO, pero no me marca como selected la seleccion del segundo.
Con mozilla (firefox) me funciona perfectamente...
Si alguien se ha encontrado con este tipo de incompatibilidades o aun sin haberlo hecho es tan 'máquina' que me puede sugerir como solucionarlo me sentire como Rosendo... profundamente agradecido ;)
Por desgracia no puedo facilitar ninguna URL donde se pueda ver en funcionamiento, pues soy un peon en un entorno cerrado. Incluso quiza tendria algun problema si saben que pongo tanto codigo disponible en la red. Pero este codigo es 'miTesoro'... y hago lo que 'quiero' ;)