Espero que este sea el apartado apropiado para este tema.
Tengo el siguiente código para listas dependientes:
Código:
De primeras, funciona bien en Internet Explorer pero en otros, como el Firefox, el cambio de la lista Provincias para que se actualice la lista de Localidades no va y la lista de Localidades se queda intacta.<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <!--#include file="conexxiones/novo6CONEX9print.asp" --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Contacto - Prueba de Listas</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <script language="javascript" src="x_selectCambio.js" type="text/javascript"></script> </head> <body> <form action="" method="post" name="f_consult" id="f_consult"> <table id="consultPED" style="width:100%;" border="0" cellspacing="0" cellpadding="0"> <tr> <td><label for="prov"> Provincia </label><img src="imags/num2.gif" width="14" height="9" /><br /> <select name="prov" class="campoText" id="prov" onchange="cambioProv(document.forms.f_consult.prov[selectedIndex].value)"> <% Dim rs_Provincia Set rs_Provincia = Server.CreateObject("ADODB.Recordset") rs_Provincia.ActiveConnection = conexionNovPri rs_Provincia.Source = "SELECT * FROM PROVINCIAS" rs_Provincia.CursorType = 0 rs_Provincia.CursorLocation = 3 rs_Provincia.LockType = 3 rs_Provincia.Open do until rs_Provincia.EOF %> <option value="<%=rs_Provincia.Fields("IDProv")%>"><%=rs_Provincia.Fields("Provincia")%></option><% rs_Provincia.movenext loop %> </select></td> <td><label for="locali"> Localidad </label><img src="imags/num2.gif" width="14" height="9" /><br /><select name="locali" id="locali" class="campoText"> <option value="inicLocali"> Seleccione una</option> <option value="inicLocali">-------------------------------------</option></select> <script language="javascript" type="text/javascript"> <!-- function Tupla ( campo1, campo2 ) { this.campo1 = campo1; this.campo2 = campo2; } <% 'Vamos a crear nuestros arrays de productos desde ASP 'El primer if detecta un cambio en la categoría para 'crear un nuevo array en Javascript Dim rs_Localidad, vcuenta, vprov Set rs_Localidad = Server.CreateObject("ADODB.Recordset") rs_Localidad.ActiveConnection = conexionNovPri rs_Localidad.Source = "SELECT * FROM LOCALIDADES" rs_Localidad.CursorType = 0 rs_Localidad.CursorLocation = 3 rs_Localidad.LockType = 3 rs_Localidad.Open vcuenta = 0 vprov = "basura" do until rs_Localidad.EOF if (vprov <> rs_Localidad.Fields("deProvincia")) then ' Si cambio de Provincia, se empieza a contar desde 0 vcuenta = 0 vprov = rs_Localidad.Fields("deProvincia") 'además, hay que crear un nuevo array para la Provincia %> var provincia_<%=vprov%> = new Array(); <% end if %> provincia_<%=vprov%>[<%=vcuenta%>]=new Tupla("<%=rs_Localidad.Fields("Localidad")%>","<%=rs_Localidad.Fields("IDLocal")%>"); <% rs_Localidad.MoveNext vcuenta = vcuenta + 1 loop %> var contador; function cambioProv ( array ) { // Compone la lista dependiente (LOCALIDADES) a partir // del valor de la opción escogida en la lista "padre" (PROVINCIAS) BorrarLista(); array = eval("provincia_" + array); for (contador=0; contador<array.length; contador++) { // añade elementos nuestro combobox var optionObj = new Option( array[contador].campo1, array[contador].campo2 ); f_consult.locali.options[contador] = optionObj; } // for } // cambioProv function BorrarLista() { f_consult.locali.length=0; } //Inicializamos cambioProv (1); document.forms.f_consult.prov.selectedIndex=0; //Esta línea hace que se reinicie la lista Provincias con el primer valor de esta //al enviar el formulario //--> </script></td> <td id="otraProv" style="display:none;"><label for="otraLPP"> Otra Localidad, Provincia, País </label><img src="imags/num2.gif" width="14" height="9" /><br /><input type="text" name="otraLPP" id="otraLPP" onfocus="if(this.value==this.defaultValue)this.value=''" value="Localidad / Provincia / País" class="campoText anchOtraLPP" /></td> </tr> </table> <input name="" type="reset" /> </form> </body> </html>
Me he dado cuenta que si quito el encabezado del html...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
...entonces el cambio de lista a lista si funciona en cualquier navegador. Pero el quitar ese bloque afecta a ciertos estilos de formato que tengo establecidos en el archivo original dónde tengo el código completo...
¿Alguien tendría una solución para que las listas dependientes estas funcionen correctamente en cualquier navegador y con el bloque ese del DOCTYPE?
Gracias...
PD: bueno y si alguien tiene otro código de listas dependientes que funcione correctamente bajo los criterios expuestos...
Saludos,
zacktagnan.
========================================