Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Ampliar listas con JS

Estas en el tema de Ampliar listas con JS en el foro de Javascript en Foros del Web. Hola Amigos, les cuento que estoy armando dos Select Dependientes con JS, en el primero el usuario selecciona el nombre del cliente y esto hace ...
  #1 (permalink)  
Antiguo 12/06/2017, 07:38
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 4 meses
Puntos: 11
Sonrisa Ampliar listas con JS

Hola Amigos, les cuento que estoy armando dos Select Dependientes con JS, en el primero el usuario selecciona el nombre del cliente y esto hace que se cree automáticamente la segunda lista (select) con los contratos asociados a dicho cliente.

Esta parte me funciona a la perfección. Ahora bien, lo que no sé cómo hacer es que al mismo tiempo que se crea el segundo select con los contratos del cliente, también se genere al mismo tiempo otro select con las oficinas de dicho cliente.

Ojo, No estoy buscando hacer "3 select dependientes en cascada", solo quiero agregar a mis 2 select dependientes un tercero, es decir, al seleccionar un cliente de la primera lista select, se generen 2 listas individuales con los contratos y otra con las oficinas respectivamente según la opción seleccionada en el primer select

Aquí les comparto las tablas involucradas, el HTML y por supuesto el JS

TABLAS>
Código:
tbl_clientes> id_cliente, nombre_cliente
1, ACME
2, SONY
3, SAMSUNG

tbl_contratos> id_contrato, id_cliente, nombre_contrato
1, 1, contrato_A
2, 1, contrato_B
3, 3, contrato-2017
4, 2, operaciones-2018

tbl_oficinas> id_oficinas, id_cliente, nombre_oficina
1, 1, 'sede principal'
2, 1, 'sucursal del centro'
3, 3, 'sede principal'
4, 2, 'oficina del centro'
5, 2, 'oficina avenida libertad'
HTML>
Ojo: Previamente se crearon los arreglos $_agreements y $_customers utilizados en el siguiente HTML y JS
Código HTML:
<!-- PRIMERA LISTA SELECT -->
<div class="col-md-6 col-sm-6 col-xs-12">
	<select id="id_cliente" name="id_cliente" onChange="selectChange(this, form.id_contrato, arrContratos, arrContratosId);" class="select2_group form-control" required="required">
		<optgroup label="Listado de Clientes:">
		<option value="">Seleccione un cliente...</option>
             	<?
             	foreach ($_customers as $clave => $cliente) { ?>
			<option value="<?php echo $cliente['id_cliente'];?>"> <?php echo $cliente['nombre_cliente'];?></option>
		<? } ?>
		</optgroup>
	</select>
</div>

<!-- SEGUNDA LISTA SELECT -->
<div class="col-md-6 col-sm-6 col-xs-12">
	<select id="id_contrato" name="id_contrato" class="select2_group form-control" required="required">
	</select>
</div> 
JAVASCRIPT>
Código Javascript:
Ver original
  1. <? // INICIO: LISTAS DEPENDIENTES: CLIENTE >> CONTRATO ///////////////////// ?>
  2. <SCRIPT LANGUAGE="JavaScript">
  3. var arrContratos = new Array();
  4. var arrContratosId = new Array();
  5.  
  6. <? // Armamos la lista desplegable de los CONTRATOS
  7. foreach ($_agreements as $clave => $contrato) {
  8.     echo 'arrContratos['.$contrato['id_contrato'].'] = "'.$contrato['nombre_contrato'].'"';echo "\n";
  9.     echo 'arrContratosId['.$contrato['id_contrato'].'] = '.$contrato['id_cliente'];echo "\n";
  10. }
  11. ?>
  12. function selectChange(control, controlToPopulate, ItemArray, GroupArray)
  13. {
  14.     var myEle ;
  15.     var x ;
  16.     // Empty the second drop down box of any choices
  17.     for (var q=controlToPopulate.options.length;q>=0;q--) controlToPopulate.options[q]=null;
  18.     // ADD Default Choice - in case there are no values
  19.     myEle = document.createElement("option") ;
  20.     myEle.value = 0 ;
  21.  
  22.     if (control.name == "id_cliente") {
  23.         myEle.text = "Seleccione el contrato..." ;
  24.     }
  25.     controlToPopulate.add(myEle) ;
  26.     // Now loop through the array of individual items
  27.     // Any containing the same child id are added to
  28.     // the second dropdown box
  29.     for ( x = 0 ; x < ItemArray.length  ; x++ )
  30.     {
  31.         if ( GroupArray[x] == control.value )
  32.         {
  33.             myEle = document.createElement("option") ;
  34.             myEle.value = x ;
  35.             myEle.text = ItemArray[x] ;
  36.             controlToPopulate.add(myEle) ;
  37.         }
  38.     }
  39. }
  40. //  End -->
  41. </script>
  42. <? // FINAL: LISTAS DEPENDIENTES: CLIENTE >> CONTRATO ///////////////////// ?>
Sé que debe ser algo sencillo, pero no soy muy buena en JS, espero me puedan apoyar
.

Última edición por julia2021; 12/06/2017 a las 08:38
  #2 (permalink)  
Antiguo 12/06/2017, 09:15
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 4 meses
Puntos: 11
Sonrisa Respuesta: Ampliar listas con JS

Yupiiiii !, les cuento que ya lo pude solucionar, aquí les dejo la respuesta por si acaso a alguien le pueda servir.

En HTML coloque más opciones en el OnChange:
Código HTML:
<select autofocus id="id_cliente" name="id_cliente" onChange="selectChange(this, form.id_contrato, arrContratos, arrContratosId, form.id_sucursal, arrSucursales, arrSucursalesId);" class="select2_group form-control" required="required">
 <option value="">Seleccione un cliente.......
En JS me puse a armar otro select con los nuevos parametros recibidos del HTML
Código Javascript:
Ver original
  1. <? // INICIO: LISTAS DEPENDIENTES: CLIENTE >> CONTRATO ///////////////////// ?>
  2. <? // INICIO: LISTAS DEPENDIENTES: CLIENTE >> SUCURSAL ///////////////////// ?>
  3. <SCRIPT LANGUAGE="JavaScript">
  4. var arrContratos    = new Array();
  5. var arrContratosId  = new Array();
  6. var arrSucursales   = new Array();
  7. var arrSucursalesId = new Array();
  8.  
  9. <? // Armamos la lista desplegable de los CONTRATOS
  10. foreach ($_agreements as $clave => $contrato) {
  11.     echo 'arrContratos['.$contrato['id_contrato'].'] = "'.$contrato['nombre'].' ('.$contrato['codigo'].')'.'"';echo "\n";
  12.     echo 'arrContratosId['.$contrato['id_contrato'].'] = '.$contrato['id_cliente'];echo "\n";
  13. }
  14. ?>
  15. <? // Armamos la lista desplegable de los SUCURSALES
  16. foreach ($_offices as $clave => $sucursal) {
  17.     echo 'arrSucursales['.$sucursal['id_sucursal'].'] = "'.$sucursal['nombre'].' ('.$sucursal['id_sucursal'].')'.'"';echo "\n";
  18.     echo 'arrSucursalesId['.$sucursal['id_sucursal'].'] = '.$sucursal['id_cliente'];echo "\n";
  19. }
  20. ?>
  21. function selectChange(control, controlToPopulate, ItemArray, GroupArray, controlToPopulate2, ItemArray2, GroupArray2)
  22. {
  23.     // Armamos la lista de CONTRATOS
  24.     var myEle ;
  25.     var x ;
  26.     // Empty the second drop down box of any choices
  27.     for (var q=controlToPopulate.options.length;q>=0;q--) controlToPopulate.options[q]=null;
  28.     // ADD Default Choice - in case there are no values
  29.     myEle = document.createElement("option") ;
  30.     myEle.value = 0 ;
  31.  
  32.     if (control.name == "id_cliente") {
  33.         myEle.text = "Seleccione el contrato..." ;
  34.     }
  35.     controlToPopulate.add(myEle) ;
  36.     // Now loop through the array of individual items
  37.     // Any containing the same child id are added to
  38.     // the second dropdown box
  39.     for ( x = 0 ; x < ItemArray.length  ; x++ )
  40.     {
  41.         if ( GroupArray[x] == control.value )
  42.         {
  43.             myEle = document.createElement("option") ;
  44.             myEle.value = x ;
  45.             myEle.text = ItemArray[x] ;
  46.             controlToPopulate.add(myEle) ;
  47.         }
  48.     }
  49.  
  50.     // Armamos la lista de SUCURSALES
  51.     var myEle2 ;
  52.     var x2 ;
  53.     // Empty the second drop down box of any choices
  54.     for (var q2=controlToPopulate2.options.length;q2>=0;q2--) controlToPopulate2.options[q2]=null;
  55.     // ADD Default Choice - in case there are no values
  56.     myEle2 = document.createElement("option") ;
  57.     myEle2.value = 0 ;
  58.  
  59.     if (control.name == "id_cliente") {
  60.         myEle2.text = "Seleccione la oficina..." ;
  61.     }
  62.     controlToPopulate2.add(myEle2) ;
  63.     // Now loop through the array of individual items
  64.     // Any containing the same child id are added to
  65.     // the second dropdown box
  66.     for ( x2 = 0 ; x2 < ItemArray2.length  ; x2++ )
  67.     {
  68.         if ( GroupArray2[x2] == control.value )
  69.         {
  70.             myEle2 = document.createElement("option") ;
  71.             myEle2.value = x2 ;
  72.             myEle2.text = ItemArray2[x2] ;
  73.             controlToPopulate2.add(myEle2) ;
  74.         }
  75.     }
  76. }
  77. //  End -->
  78. </script>
  79. <? // FINAL: LISTAS DEPENDIENTES: CLIENTE >> CONTRATO ///////////////////// ?>
  80. <? // FINAL: LISTAS DEPENDIENTES: CLIENTE >> SUCURSAL ///////////////////// ?>
Espero les sirva a alguien. Besos a todos, Bye.

Etiquetas: arraylist, arreglos, listas, select
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 21:58.