Foros del Web » Programando para Internet » ASP Clásico »

problemas con combobox

Estas en el tema de problemas con combobox en el foro de ASP Clásico en Foros del Web. Bueno, este es el mítico código que se puso hace bastante tiempo en esta misma web, el que digo estaba configurado para 2 combox, este ...
  #1 (permalink)  
Antiguo 06/03/2003, 06:52
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 2
problemas con combobox

Bueno, este es el mítico código que se puso hace bastante tiempo en esta misma web, el que digo estaba configurado para 2 combox, este lo está para 3 pero falla, lo que hace es que en el 3º combo al cargar la página no me recoge los resutados de ese tercero, sino que lo que hace es coger el resultado del segundo, lo podéis ver en esta dirección:

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

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">&nbsp;</td>
      <
td width="86%" height="13">&nbsp;</td>
  </
tr>
  <
tr
      <
td width="14%" valign="top">&nbsp; </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 oConnrsSQLcuentacategoria

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 SQLoConn
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 oConn1rs1SQL1cuenta1categoria1

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 SQL1oConn1
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 campo1campo2)
{
    
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 categoriaempiezo 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=0contador<array.lengthcontador++) 
{
// 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>
              &nbsp;
              <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> 
Un saludo
  #2 (permalink)  
Antiguo 08/04/2003, 03:32
 
Fecha de Ingreso: noviembre-2002
Mensajes: 223
Antigüedad: 21 años, 6 meses
Puntos: 1
Hola haven!!! conseguiste arreglar el problema???
A mi me pasa lo mismo que a ti, llevo dando vueltas con el tema de las 3 listas dependientes desde hace tiempo, pero no consigo que de ninguna forma funcione a la perfección.

Saludos!
  #3 (permalink)  
Antiguo 08/04/2003, 18:19
Avatar de carlunchos  
Fecha de Ingreso: enero-2002
Ubicación: no tengo, soy un desubicado?.
Mensajes: 438
Antigüedad: 22 años, 4 meses
Puntos: 1
Que tal Sres, porque no prueban creando una function que tome el valor seleccionado del combo1 por medio de un OnChange en el select con lo que reenviaran la misma pagina, con una querystring retoman el valor enviado y se lo pasan al segundo select y asi sucesivamente. La idea es pasarle al siguiente combo un parametro que corresponde al combo anterior.

Saludos.
__________________
Carlunchos
  #4 (permalink)  
Antiguo 09/04/2003, 01:23
 
Fecha de Ingreso: noviembre-2002
Mensajes: 223
Antigüedad: 21 años, 6 meses
Puntos: 1
Gracias por contestar. Verás, yo he modificado el código de las tres listas dependientes de asptutor y he conseguido que funcione.

El problema es que solo funciona con Explorer, no con Netscape.

Si alguien puede echarme una mano, no tengo problema en enviar la página.

Saludos !!!!
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 18:16.