Quisiera solicitar su apoyo para lograr hacer funcionar un combo select anidado, explico un poco:
En principio tengo un formulario con campos comunes, y utilizo un campo select para imprimir los campos que me faltan y que no se ocupan en todas las categorías (campos que no son comunes entre cada categoría) pero que se imprimen según la selección del select.
Este es el select de las categorías:
Código HTML:
Ver original
El resultado de la selección se imprime en el siguiente div
Código HTML:
Ver original
Ahora el script que me procesa el campo select es el siguiente:
Código Javascript:
Ver original
$(document).ready(function(){ $("#status").change(function () { $("#status option:selected").each(function () { seleccion=$(this).val(); $.post("campos.php", { seleccion: seleccion }, function(data){ $("#formularios").html(data); }); }); }) });
Los valores del campos.php (código php que busca la coincidencia e imprime los formularios) son los siguientes:
Código PHP:
Ver original
<?php $options=""; if ($_POST["seleccion"]==0) { $options= ' '; } if ($_POST["seleccion"]=="abarrotes cat1") { $options= ' <table class="forms" width="100%" border="0"> <tr> <td class="forms2" width="20%">Abarrotes cat1:</td> <td width="80%"><select name="tipo_abarrotes" class="select"> <option value="0">=Selecciona tipo de abarrotes=</option> <option value="perecederos">perecederos</option> <option value="no perecederos">no perecederos</option> <option value="granos">granos</option> <option value="otros">otros</option> </select></td> </tr> <tr> <td class="forms2">código</td> <td><input type="text" class="textbox2" name="cod_tp"/></td> </table> '; } if ($_POST["seleccion"]=="abarrotes cat2") { $options= ' <table class="forms" width="100%" border="0"> <tr> <td class="forms2" width="20%">Abarrotes cat2:</td> <td width="80%"><select name="tipo_abarrotes2" class="select"> <option value="0">=Selecciona tipo de abarrotes2=</option> <option value="enlatados">enlatados</option> <option value="cajas">cajas</option> <option value="bolsas">bolsas</option> <option value="granel">granel</option> </select></td> </tr> <tr> <td class="forms2">código:</td> <td><input type="text" class="textbox2" name="cod_tp2"/></td> </table> '; } if ($_POST["seleccion"]=="herramientas cat1") { $options= ' <table class="forms" width="100%" border="0"> <tr> <td class="forms2" width="20%">herramientas cat1:</td> <td width="80%"><select name="tipo_herramientas" class="select"> <option value="0">=Selecciona tipo de herramientas=</option> <option value="manuales">manuales</option> <option value="electricas">electricas</option> <option value="mecanicas">mecanicas</option> <option value="combustible">combustible</option> </select></td> </tr> </table> '; } if ($_POST["seleccion"]=="herramientas cat2") { $options= ' <table class="forms" width="100%" border="0"> <tr> <td class="forms2" width="20%">herramientas cat2:</td> <td width="80%"><select name="clase_herramientas" class="select"> <option value="0">=Selecciona clase de herramientas=</option> <option value="corte">corte</option> <option value="perforacion">perforacion</option> <option value="medicion">medicion</option> </select></td> </tr> </table> '; } if ($_POST["seleccion"]=="autos") { $options= ' <table class="forms" width="100%" border="0"> <tr> <td class="forms2" width="20%">Marca:</td> <td width="80%"> <select name="marca" class="select id="lst-marcas"> <option value="0">=Selecciona una marca=</option> <option value="marca1">marca1</option> <option value="marca2">marca2</option> <option value="marca3">marca3</option> <option value="marca4">marca4</option> <option value="marca5">marca5</option> <option value="marca6">marca6</option> <option value="marca7">marca7</option> <option value="marca8">marca8</option> </select></td> </tr> <tr> //Esta es la parte que no funciona************************************ <td class="forms2">Modelo:</td> <td><select name="modelo" class="select" id="modelo"> <option value="0"></option> </select></td> </table> '; } echo $options; ?>
La sección comentada es la que no funciona pues de acuerdo a la selección del auto debería de cargarse dinámicamente también una lista con los modelos, los cuales al igual que las sección anterior están a cargo del código siguiente:
Código Javascript:
Ver original
<!--funcion autos--> $(document).ready(function(){ $("#lst-marcas").change(function () { $("#lst-marcas option:selected").each(function () { seleccion=$(this).val(); $.post("modelos.php", { seleccion: seleccion }, function(data){ $("#modelo").html(data); }); }); }) });
Y al igual que el código anterior, la petición javascript es resuelta por "modelos.php" con el siguiente código.
Código PHP:
Ver original
<?php $options2=""; if ($_POST["seleccion"]==0) { $options= ' <option value="1"></option> '; } if ($_POST["seleccion"]=="marca1") { $options2= ' <option value="0">=Selecciona un modelo=</option> <option value="modelo1">modelo1</option> <option value="modelo2">modelo2</option> <option value="modelo3">modelo3</option> <option value="modelo4">modelo4</option> <option value="modelo5">modelo5</option> <option value="modelo6">modelo6</option> <option value="modelo7">modelo7</option> <option value="modelo8">modelo8</option> '; } if ($_POST["seleccion"]=="marca2") { $options2= ' <option value="0">=Selecciona un modelo=</option> <option value="modelo1">modelo1</option> <option value="modelo2">modelo2</option> <option value="modelo3">modelo3</option> <option value="modelo4">modelo4</option> <option value="modelo5">modelo5</option> '; } if ($_POST["seleccion"]=="marca3") { $options2= ' <option value="0">=Selecciona un modelo=</option> <option value="modelo1">modelo1</option> <option value="modelo2">modelo2</option> <option value="modelo3">modelo4</option> <option value="modelo5">modelo5</option> <option value="modelo6">modelo</option> '; } if ($_POST["seleccion"]=="marca4") { $options2= ' <option value="0">=Selecciona un modelo=</option> <option value="modelo1">modelo1</option> <option value="modelo2">modelo2</option> <option value="modelo3">modelo3</option> <option value="modelo4">modelo4</option> <option value="modelo5">modelo5</option> <option value="modelo6">modelo6</option> <option value="modelo7">modelo7</option> <option value="modelo8">modelo8</option> <option value="modelo9">modelo9</option> <option value="modelo10">modelo10</option> <option value="modelo11">modelo11</option> '; } echo $options2; ?>
El problema es que si me imprime la primera ejecución del javascript, es decir, me imprime correctamente los formularios, pero cuando me imprime el formulario de autos me imprime el select con los nombres de las marcas, pero la función de los modelos ya no hace nada ya no muestra nada en el select y ese es el problema que ahí debería de mostrar los modelos de los autos. No se si estoy llamando mal la función, o simplemente, no se puede invocar una función que esta dentro de otra función que fue previamente invocada.
Desde ya les agradezco sus comentarios, observaciones y sugerencias.
Obviamente el código no está completo, lo armé a modo de que sea comprensible. Si faltan datos o no fui muy claro acepto comentarios de todo tipo que me ayuden a resolver este problema.