Foros del Web » Programando para Internet » Javascript »

javascript:IEvsMOZILLA

Estas en el tema de javascript:IEvsMOZILLA en el foro de Javascript en Foros del Web. Buenas chente, el siguiente código trata de montar un combo a partir de los datos seleccionados en otro combo. He querido añadirle la funcionalidad de ...
  #1 (permalink)  
Antiguo 13/06/2005, 03:38
 
Fecha de Ingreso: octubre-2004
Ubicación: Barcelona
Mensajes: 28
Antigüedad: 19 años, 6 meses
Puntos: 0
javascript:IEvsMOZILLA

Buenas chente, el siguiente código trata de montar un combo a partir de los datos seleccionados en otro combo.
He querido añadirle la funcionalidad de marcar una opcion por defecto y en este caso, lo hace perfectamente en el firefox pero no en el IE.
¿Alguna sugerencia?
Gracias.
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('opc' + i + '=new Option(\'' + names[indice][i] + '\', \'' + values[indice][i] + '\',true' + ')');
					aux = eval('new Option(\'' + names[indice][i] + '\',\'' + values[indice][i] + '\',true' + ')');
                }
				else {
					//var aux = eval('opc' + i + '=new Option(\'' + names[indice][i] + ' \', \' ' + values[indice][i] + '\')');
					aux = eval('new Option(\'' + names[indice][i] + '\',\'' + values[indice][i] + '\')');
				}
			    eval( idSelect_to_modify + '.options[' + i + ']=aux');
			}
	}
}
  #2 (permalink)  
Antiguo 13/06/2005, 07:57
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola manou:

En mi opinión hay un abuso de la función eval (opino que es innecesaria en la mayoría de los casos), pero con una parte del código es muy difícil poder ayudarte. Si tuvieras la página en algún sitio, o pusieras más del código, creo que sería más fácil intentar ayudarte.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 15/06/2005, 00:46
 
Fecha de Ingreso: octubre-2004
Ubicación: Barcelona
Mensajes: 28
Antigüedad: 19 años, 6 meses
Puntos: 0
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' ;)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:49.