http://www.copysan.com/pruebas/listas/combo.asp
Luego por ejemplo cuando seleciono algo del primer combo y luego del segundo hay veces que me da error porque no hay una categoría para ese combo, como podría solucionar esto para que no me de error, lo que necesitaría es que no aparecería el tercer combo a no ser que exista una subcategoria, para ella.
Al seleccionar por ejemplo del primer combo (cocina), del segundo(Accesorios en aluminio) y del tercero (Copetes), al darle al botón envio me va a la página especificada, de ahí que si no esiste nada para el tercer combo, no me debería salir nada y debería poner que si hay categoria para el tercer combo que me ponga OnChange="ComponerLista (document.forms.Listas.Categorias[selectedIndex].value);" pero que si no hay categorias que me ponga onchange="document.form.submit()". Alguien sabe como puedo solucionar esto, si es todos los puntos mejor
![sonrisota](http://static.forosdelweb.com/fdwtheme/images/smilies/xD.png)
Código PHP:
<FORM NAME="Listas" METHOD="POST" ACTION="receive.asp">
<table width="616" border="0" cellspacing="0" cellpadding="0" height="105">
<tr>
<td width="14%" height="13"> </td>
<td width="86%" height="13"> </td>
</tr>
<tr>
<td width="14%" valign="top"> </td>
<td valign="top" width="86%">
<table width="640" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="middle">
<!--
Listas dependientes por Carlos de la Orden Dijs
17 de Diciembre de 2000
Modificaciones po Sergio Escobés
01 de Julio de 2002
--->
<SELECT NAME="Categorias" SIZE="1"
OnChange="ComponerLista (document.forms.Listas.Categorias[selectedIndex].value);" class="nodiCopia2">
<%
Dim oConn, rs, SQL, cuenta, categoria
set oConn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("mecalde.mdb")
SQL="SELECT * FROM Categoria1"
rs.Open SQL, oConn
cuenta=1
while not rs.EOF
%>
<OPTION VALUE="<%=rs.Fields("ID")%>"
<% if cuenta=1 then%>
SELECTED
<%end if%>>
<%=rs.Fields("NOMBRE")%></OPTION>
<%
rs.MoveNext
cuenta=cuenta+1
wend
rs.Close
%>
</SELECT>
<SELECT NAME="Productos" SIZE="1" OnChange="ComponerLista2 (document.forms.Listas.Productos[selectedIndex].value);" class="nodiCopia2">
<%
Dim oConn1, rs1, SQL1, cuenta1, categoria1
set oConn1=Server.CreateObject("ADODB.Connection")
set rs1=Server.CreateObject("ADODB.Recordset")
oConn1.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("mecalde.mdb")
SQL1="SELECT * FROM Categoria2"
rs1.Open SQL1, oConn1
cuenta1=1
while not rs1.EOF
%>
<OPTION VALUE="<%=rs1.Fields("ID")%>"
<% if cuenta1=1 then%>
SELECTED
<%end if%>>
<%=rs1.Fields("NOMBRE")%></OPTION>
<%
rs1.MoveNext
cuenta1=cuenta1+1
wend
rs1.Close
%>
</SELECT>
<script language="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
SQL="SELECT * FROM Categoria2 ORDER BY CATEGORIA, ID, NOMBRE"
rs.Open SQL, oConn
cuenta=0
cat="basura"
while not rs.EOF
if cat<>rs.Fields("SUBID") then
' cambio de categoria, empiezo a contar en 0
cuenta=0
cat=rs.Fields("SUBID")
'además tengo que crear un nuevo array para la categoría
%>
var opciones<%=cat%> = new Array();
<%
end if
%>
opciones<%=cat%>[<%=cuenta%>]=new Tupla("<%=rs.Fields("NOMBRE")%>","<%=rs.Fields("ID")%>");
<%
cuenta=cuenta+1
rs.MoveNext
wend
%>
<%
'Limpiamos objetos
rs.Close
set rs=nothing
oConn.Close
set oConn=nothing
%>
var contador;
function ComponerLista ( array ) {
// Compone la lista dependiente a partir
// del valor de la opcion escogida en la lista "padre"
BorrarLista();
array = eval("opciones" + array);
for (contador=0; contador<array.length; contador++)
{
// añade elementos nuestro combobox
var optionObj = new Option( array[contador].campo1, array[contador].campo2 );
Listas.Productos.options[contador] = optionObj;
} // for
} // ComponerLista
function BorrarLista() {
Listas.Productos.length=0;
}
//Inicializamos
ComponerLista (1);
-->
</script>
<SELECT NAME="SubProductos" size="1" class="nodiCopia2">
<%
Dim oConn2, rs2, SQL2, cuenta2, categoria2
set oConn2=Server.CreateObject("ADODB.Connection")
set rs2=Server.CreateObject("ADODB.Recordset")
oConn2.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("mecalde.mdb")
SQL2="SELECT * FROM Categoria3"
rs2.Open SQL2, oConn2
cuenta2=1
while not rs2.EOF
%>
<OPTION VALUE="<%=rs2.Fields("ID")%>"
<% if cuenta2=1 then%>
SELECTED
<%end if%>>
<%=rs2.Fields("NOMBRE")%></OPTION>
<%
rs2.MoveNext
cuenta2=cuenta2+1
wend
rs2.Close
%>
</SELECT>
<script language="Javascript">
<!--
function Tupla2 ( 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
SQL2="SELECT * FROM Categoria3 ORDER BY CATEGORIA, SUBID, NOMBRE"
rs2.Open SQL2, oConn2
cuenta2=0
cat2="basura2"
while not rs2.EOF
if cat2<>rs2.Fields("SUBID") then
' cambio de categoria, empiezo a contar en 0
cuenta2=0
cat2=rs2.Fields("SUBID")
'además tengo que crear un nuevo array para la categoría
%>
var opciones<%=cat2%> = new Array();
<%
end if
%>
opciones<%=cat2%>[<%=cuenta2%>]=new Tupla2("<%=rs2.Fields("NOMBRE")%>","<%=rs2.Fields("ID")%>");
<%
cuenta2=cuenta2+1
rs2.MoveNext
wend
%>
<%
'Limpiamos objetos
rs2.Close
set rs2=nothing
oConn2.Close
set oConn2=nothing
%>
var contador2;
function ComponerLista2 ( array ) {
// Compone la lista dependiente a partir
// del valor de la opcion escogida en la lista "padre"
BorrarLista2();
array = eval("opciones" + array);
for (contador2=0; contador2<array.length; contador2++)
{
// añade elementos nuestro combobox
var optionObj2 = new Option( array[contador2].campo1, array[contador2].campo2 );
Listas.SubProductos.options[contador2] = optionObj2;
} // for
} // ComponerLista
function BorrarLista2() {
Listas.SubProductos.length=0;
}
//Inicializamos
ComponerLista2 (1);
-->
</script>
<input type="image" border="0" name="imageField" src="flecha.gif"" width="15" height="15" value="Submit" align="middle">
1 </td>
</tr>
</table>
</td>
</tr>
</table>
</form>