Foros del Web » Programando para Internet » Javascript »

Error en tres combobox simultaneos

Estas en el tema de Error en tres combobox simultaneos en el foro de Javascript en Foros del Web. El primero y el segundo combo, me recogen los datos correctamente, pero el tercero me recoge, eso solo al cargar la página, los datos del ...
  #1 (permalink)  
Antiguo 05/03/2003, 10:58
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 2
Error en tres combobox simultaneos

El primero y el segundo combo, me recogen los datos correctamente, pero el tercero me recoge, eso solo al cargar la página, los datos del segundo combo, si me muevo por ellos entonces si cambia bien los datos, pero falla al cargar los datos, alguien sabe como puedo solucionar esto?????.

Tengo este código:

Código PHP:
<SELECT NAME="Categorias" SIZE="1" 
OnChange="ComponerLista (document.forms.Listas.Categorias[selectedIndex].value);">
    
    <
OPTION VALUE="1" SELECTED>Cocina</OPTION>

    <
OPTION VALUE="2">Frentes de armario</OPTION>

    <
OPTION VALUE="3">Cajón modular de aluminio M2</OPTION>

    <
OPTION VALUE="4">Mamparas de baño</OPTION>

</
SELECT>

  <
SELECT NAME="Productos" SIZE="1" 
OnChange="ComponerLista2 (document.forms.Listas.Productos[selectedIndex].value);">
    
    <
OPTION VALUE="5" SELECTED>Accesorios en aluminio</OPTION>

    <
OPTION VALUE="6">Complementos</OPTION>

    <
OPTION VALUE="7">Equipamiento interior</OPTION>

    <
OPTION VALUE="8">Frentes de armario</OPTION>

    <
OPTION VALUE="9">Puertas correderas</OPTION>

    <
OPTION VALUE="10">Sistema de puertas plegables correderas</OPTION>

    <
OPTION VALUE="11">Guías y correderas</OPTION>

    <
OPTION VALUE="12">Cajones M2 para guías de rodillo</OPTION>

    <
OPTION VALUE="13">Cajones M2 para quía de precisión extracción parcial</OPTION>

    <
OPTION VALUE="14">Cajones M2 para guías de precisión extracción total</OPTION>

    <
OPTION VALUE="15">Accesorios</OPTION>

    <
OPTION VALUE="16">Cajones M2</OPTION>

    <
OPTION VALUE="17">Accesorios para cacerolero</OPTION>

    <
OPTION VALUE="18">Mamparas</OPTION>

    <
OPTION VALUE="19">Platos de ducha</OPTION>

    <
OPTION VALUE="20" >Perfiles auxiliares</OPTION>

    <
OPTION VALUE="21">Acabados y colores</OPTION>

</
SELECT>




<
script language="Javascript">
<!--
function 
Tupla campo1campo2)
{
    
this.campo1 campo1;
    
this.campo2 campo2;

}


var 
opciones1 = new Array();

opciones1[0]=new Tupla("Accesorios en aluminio","5");


opciones1[1]=new Tupla("Complementos","6");


opciones1[2]=new Tupla("Equipamiento interior","7");


var 
opciones2 = new Array();

opciones2[0]=new Tupla("Frentes de armario","8");


opciones2[1]=new Tupla("Puertas correderas","9");


opciones2[2]=new Tupla("Sistema de puertas plegables correderas","10");


var 
opciones3 = new Array();

opciones3[0]=new Tupla("Guías y correderas","11");


opciones3[1]=new Tupla("Cajones M2 para guías de rodillo","12");


opciones3[2]=new Tupla("Cajones M2 para quía de precisión extracción parcial","13");


opciones3[3]=new Tupla("Cajones M2 para guías de precisión extracción total","14");


opciones3[4]=new Tupla("Accesorios","15");


opciones3[5]=new Tupla("Cajones M2","16");


opciones3[6]=new Tupla("Accesorios para cacerolero","17");


var 
opciones4 = new Array();

opciones4[0]=new Tupla("Mamparas","18");


opciones4[1]=new Tupla("Platos de ducha","19");


opciones4[2]=new Tupla("Perfiles auxiliares","20");


opciones4[3]=new Tupla("Acabados y colores","21");



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">
    
    <OPTION VALUE="22" SELECTED>Copetes</OPTION>

    <OPTION VALUE="23">Zocalos</OPTION>

    <OPTION VALUE="24">Accesorios de encimera</OPTION>

    <OPTION VALUE="25">Tiradores</OPTION>

    <OPTION VALUE="26">Cantoneras para puertas</OPTION>

    <OPTION VALUE="27">Rejillas de ventilación</OPTION>

    <OPTION VALUE="28">Vitrinas</OPTION>

    <OPTION VALUE="29">Golas</OPTION>

    <OPTION VALUE="30">Perfiles especiales</OPTION>

    <OPTION VALUE="31">Accesorios</OPTION>

    <OPTION VALUE="32">Protector para fondo de fregadero</OPTION>

    <OPTION VALUE="33">Herraje apertura vertical</OPTION>

    <OPTION VALUE="34">Conducciones de humos</OPTION>

    <OPTION VALUE="35">Línea Blanca</OPTION>

    <OPTION VALUE="36">Línea Cromo</OPTION>

    <OPTION VALUE="37">Tiradores</OPTION>

    <OPTION VALUE="38">Perfiles de armario</OPTION>

    <OPTION VALUE="39">Accesorios</OPTION>

    <OPTION VALUE="40">Perfiles</OPTION>

    <OPTION VALUE="41">Accesorios</OPTION>

</SELECT>


<script language="Javascript">
<!--
function Tupla2 ( campo1, campo2)
{
    this.campo1 = campo1;
    this.campo2 = campo2;

}


var opciones5 = new Array();

opciones5[0]=new Tupla2("Accesorios de encimera","24");


opciones5[1]=new Tupla2("Cantoneras para puertas","26");


opciones5[2]=new Tupla2("Copetes","22");


opciones5[3]=new Tupla2("Golas","29");


opciones5[4]=new Tupla2("Rejillas de ventilación","27");


opciones5[5]=new Tupla2("Tiradores","25");


opciones5[6]=new Tupla2("Vitrinas","28");


opciones5[7]=new Tupla2("Zocalos","23");


var opciones6 = new Array();

opciones6[0]=new Tupla2("Accesorios","31");


opciones6[1]=new Tupla2("Conducciones de humos","34");


opciones6[2]=new Tupla2("Herraje apertura vertical","33");


opciones6[3]=new Tupla2("Perfiles especiales","30");


opciones6[4]=new Tupla2("Protector para fondo de fregadero","32");


var opciones7 = new Array();

opciones7[0]=new Tupla2("Línea Blanca","35");


opciones7[1]=new Tupla2("Línea Cromo","36");


var opciones9 = new Array();

opciones9[0]=new Tupla2("Accesorios","39");


opciones9[1]=new Tupla2("Perfiles de armario","38");


opciones9[2]=new Tupla2("Tiradores","37");


var opciones10 = new Array();

opciones10[0]=new Tupla2("Accesorios","41");


opciones10[1]=new Tupla2("Perfiles","40");



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> 
Un saludo

Última edición por haven; 05/03/2003 a las 11:02
  #2 (permalink)  
Antiguo 06/03/2003, 09:24
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 2
Nadie sabe como solucionar esto?????. El problema es que el tercer combo al cargar, me recoge los datos del segundo, después al cambiar el segundo, funciona perfectamente.

Podéis ver el ejemplo aquí:

http://www.copysan.com/pruebas/listas/combo.asp

Tabién tiene otro fallo que no sé como solucionar, selecciono algo del primer combo, y después del segundo pero si no hay nada en el tercero, entonces me da un error, no podría hacer que si no hay nada que no me aparezca el tercer combo o que solo me aparezca cuando selecione el segundo combo que contenga dentro de el algo, me he hecho un lio, pero si veis el ejemplo creo que lo entendereis.

Un saludo

Última edición por haven; 06/03/2003 a las 09:28
  #3 (permalink)  
Antiguo 06/03/2003, 12:22
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Hola Haven,

El principal problema que veo es que te faltan por definir un montón de arrays.

¿No van a ir más??

La función inicialmente era para dos combos no?
  #4 (permalink)  
Antiguo 06/03/2003, 16:56
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 2
Hola tunait, gracias por responder. En cuanto a la primera pregunta, no es que falten arrays, lo que pasa es no todos los arrays tienen productos para los tres combox, Por ejempo tengo 3 combox, padre, hijo , nieto, lo que quiere decir es que no siempre los 3 combox van a tener información, siempre va a existir información el padre e hijo, pero nieto no siempre, incluso habrá veces en los que tenga que aparecer cuarto combo.

Y si el código inicial era para dos combos, por o que había pensado que quizás se podría mantener los dos y si por ejemplo cuando selecciono algo del hijo y este tiene subcategorías para llenar nieto, entonces que me aparezca un nuevo combo y así si existe en nieto que me salgA otro combo, aunque esto no se como se hará si se podrá o si hay una forma diferente de hacerlo.

¿Puedes ayudarme?

Un saludo
  #5 (permalink)  
Antiguo 07/03/2003, 07:32
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Bueno, tiene unos arreglillos, pero son parches.

Si más adelante añades más arrays, habrás de cambiar un valor.

Ahí te dejo el código tal y como he logrado que me funcionara sin errores:

<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="Javascript">
<!--
function Tupla ( campo1, campo2)
{
this.campo1 = campo1;
this.campo2 = campo2;

}
function Tupla2 ( campo1, campo2)
{
this.campo1 = campo1;
this.campo2 = campo2;

}

var opciones1 = new Array();
opciones1[0]=new Tupla("Accesorios en aluminio","5");
opciones1[1]=new Tupla("Complementos","6");
opciones1[2]=new Tupla("Equipamiento interior","7");

var opciones2 = new Array();
opciones2[0]=new Tupla("Frentes de armario","8");
opciones2[1]=new Tupla("Puertas correderas","9");
opciones2[2]=new Tupla("Sistema de puertas plegables correderas","10");

var opciones3 = new Array();
opciones3[0]=new Tupla("Guías y correderas","11");
opciones3[1]=new Tupla("Cajones M2 para guías de rodillo","12");
opciones3[2]=new Tupla("Cajones M2 para quía de precisión extracción parcial","13");
opciones3[3]=new Tupla("Cajones M2 para guías de precisión extracción total","14");
opciones3[4]=new Tupla("Accesorios","15");
opciones3[5]=new Tupla("Cajones M2","16");
opciones3[6]=new Tupla("Accesorios para cacerolero","17");

var opciones4 = new Array();
opciones4[0]=new Tupla("Mamparas","18");
opciones4[1]=new Tupla("Platos de ducha","19");
opciones4[2]=new Tupla("Perfiles auxiliares","20");
opciones4[3]=new Tupla("Acabados y colores","21");
//******* ********** *********** ***********

var opciones5 = new Array();
opciones5[0]=new Tupla2("Accesorios de encimera","24");
opciones5[1]=new Tupla2("Cantoneras para puertas","26");
opciones5[2]=new Tupla2("Copetes","22");
opciones5[3]=new Tupla2("Golas","29");
opciones5[4]=new Tupla2("Rejillas de ventilación","27");
opciones5[5]=new Tupla2("Tiradores","25");
opciones5[6]=new Tupla2("Vitrinas","28");
opciones5[7]=new Tupla2("Zocalos","23");

var opciones6 = new Array();
opciones6[0]=new Tupla2("Accesorios","31");
opciones6[1]=new Tupla2("Conducciones de humos","34");
opciones6[2]=new Tupla2("Herraje apertura vertical","33");
opciones6[3]=new Tupla2("Perfiles especiales","30");
opciones6[4]=new Tupla2("Protector para fondo de fregadero","32");

var opciones7 = new Array();
opciones7[0]=new Tupla2("Línea Blanca","35");
opciones7[1]=new Tupla2("Línea Cromo","36");

var opciones8 = new Array();
opciones8[0]=new Tupla2("Accesorios","39");
opciones8[1]=new Tupla2("Perfiles de armario","38");
opciones8[2]=new Tupla2("Tiradores","37");

var opciones9 = new Array();
opciones9[0]=new Tupla2("Accesorios","41");
opciones9[1]=new Tupla2("Perfiles","40");

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() {

document.Listas.Productos.length=0;


}

//Inicializamos
//ComponerLista (1);

var contador2;

function ComponerLista2 ( array ) {
// Compone la lista dependiente a partir
// del valor de la opcion escogida en la lista "padre"
BorrarLista2();
if(array>9){document.Listas.SubProductos.style.vis ibility='hidden' ;return false}
else{
document.Listas.SubProductos.style.visibility='vis ible'
array = eval("opciones" + array);

for (contador2=0; contador2<array.length-1; 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() {

document.Listas.SubProductos.length=0;
}

//Inicializamos
//ComponerLista2 (1);

-->
</script>
</head>

<body bgcolor="#FFFFFF" text="#000000">
<form name="Listas">
<SELECT NAME="Categorias" SIZE="1"
OnChange="ComponerLista (document.forms.Listas.Categorias[selectedIndex].value);">
<OPTION VALUE="1" SELECTED>Cocina</OPTION>
<OPTION VALUE="2">Frentes de armario</OPTION>
<OPTION VALUE="3">Cajón modular de aluminio M2</OPTION>
<OPTION VALUE="4">Mamparas de baño</OPTION>
</SELECT>

<SELECT NAME="Productos" SIZE="1"
OnChange="ComponerLista2 (document.forms.Listas.Productos[selectedIndex].value);">
<OPTION VALUE="5" SELECTED>Accesorios en aluminio</OPTION>
<OPTION VALUE="6">Complementos</OPTION>
<OPTION VALUE="7">Equipamiento interior</OPTION>
<OPTION VALUE="8">Frentes de armario</OPTION>
<OPTION VALUE="9">Puertas correderas</OPTION>
<OPTION VALUE="10">Sistema de puertas plegables correderas</OPTION>
<OPTION VALUE="11">Guías y correderas</OPTION>
<OPTION VALUE="12">Cajones M2 para guías de rodillo</OPTION>
<OPTION VALUE="13">Cajones M2 para quía de precisión extracción parcial</OPTION>
<OPTION VALUE="14">Cajones M2 para guías de precisión extracción total</OPTION>
<OPTION VALUE="15">Accesorios</OPTION>
<OPTION VALUE="16">Cajones M2</OPTION>
<OPTION VALUE="17">Accesorios para cacerolero</OPTION>
<OPTION VALUE="18">Mamparas</OPTION>
<OPTION VALUE="19">Platos de ducha</OPTION>
<OPTION VALUE="20" >Perfiles auxiliares</OPTION>
<OPTION VALUE="21">Acabados y colores</OPTION>
</SELECT>

<SELECT NAME="SubProductos" size="1">
<OPTION VALUE="22" SELECTED>Copetes</OPTION>
<OPTION VALUE="23">Zocalos</OPTION>
<OPTION VALUE="24">Accesorios de encimera</OPTION>
<OPTION VALUE="25">Tiradores</OPTION>
<OPTION VALUE="26">Cantoneras para puertas</OPTION>
<OPTION VALUE="27">Rejillas de ventilación</OPTION>
<OPTION VALUE="28">Vitrinas</OPTION>
<OPTION VALUE="29">Golas</OPTION>
<OPTION VALUE="30">Perfiles especiales</OPTION>
<OPTION VALUE="31">Accesorios</OPTION>
<OPTION VALUE="32">Protector para fondo de fregadero</OPTION>
<OPTION VALUE="33">Herraje apertura vertical</OPTION>
<OPTION VALUE="34">Conducciones de humos</OPTION>
<OPTION VALUE="35">Línea Blanca</OPTION>
<OPTION VALUE="36">Línea Cromo</OPTION>
<OPTION VALUE="37">Tiradores</OPTION>
<OPTION VALUE="38">Perfiles de armario</OPTION>
<OPTION VALUE="39">Accesorios</OPTION>
<OPTION VALUE="40">Perfiles</OPTION>
<OPTION VALUE="41">Accesorios</OPTION>
</SELECT>
</form>
</body>
</html>

Yá me dirás algo
  #6 (permalink)  
Antiguo 07/03/2003, 11:59
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 2
Gracias tunait, lo voy a probar y lo hago en ASP haber que sale.

Un saludo
  #7 (permalink)  
Antiguo 12/03/2003, 12:22
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 2
Hola de nuevo tunait, comentarte que ya casi está lo de los combox, aunque me sale algún error, pero ya lo solucionaré.

Un pregunta más, como podría hacer para que solo me saldría de primeras un combo y al ir seleccionando algo del primer combo, entonces que me vayan apareciendo el resto si existen????

Un saludo
  #8 (permalink)  
Antiguo 19/03/2003, 21:37
 
Fecha de Ingreso: noviembre-2002
Mensajes: 53
Antigüedad: 21 años, 5 meses
Puntos: 0
hola ayuda por favor

amigos necesito saber cual de estos codigos que publicaron funciona bien?

mi problema es que quiero traer de una base de datos esas palabras , las cuales vendran en 3 combos :

1.paises
2.departamentos
3.ciudades

necesito que me triga los datos de la base de datos y lo me loscargen en los combos me yudan por favor
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:33.