Hola a tod@s:
Espero que este sea el apartado apropiado para este tema.
Tengo el siguiente código para listas dependientes:
Código:
<%@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>
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.
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.
========================================