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:
HTML>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'
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>
Código Javascript:
Sé que debe ser algo sencillo, pero no soy muy buena en JS, espero me puedan apoyar Ver original
<? // INICIO: LISTAS DEPENDIENTES: CLIENTE >> CONTRATO ///////////////////// ?> <SCRIPT LANGUAGE="JavaScript"> var arrContratos = new Array(); var arrContratosId = new Array(); <? // Armamos la lista desplegable de los CONTRATOS foreach ($_agreements as $clave => $contrato) { echo 'arrContratos['.$contrato['id_contrato'].'] = "'.$contrato['nombre_contrato'].'"';echo "\n"; echo 'arrContratosId['.$contrato['id_contrato'].'] = '.$contrato['id_cliente'];echo "\n"; } ?> function selectChange(control, controlToPopulate, ItemArray, GroupArray) { var myEle ; var x ; // Empty the second drop down box of any choices for (var q=controlToPopulate.options.length;q>=0;q--) controlToPopulate.options[q]=null; // ADD Default Choice - in case there are no values myEle = document.createElement("option") ; myEle.value = 0 ; if (control.name == "id_cliente") { myEle.text = "Seleccione el contrato..." ; } controlToPopulate.add(myEle) ; // Now loop through the array of individual items // Any containing the same child id are added to // the second dropdown box for ( x = 0 ; x < ItemArray.length ; x++ ) { if ( GroupArray[x] == control.value ) { myEle = document.createElement("option") ; myEle.value = x ; myEle.text = ItemArray[x] ; controlToPopulate.add(myEle) ; } } } // End --> </script> <? // FINAL: LISTAS DEPENDIENTES: CLIENTE >> CONTRATO ///////////////////// ?>
.