Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/06/2017, 07:38
Avatar de julia2021
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