Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/12/2012, 16:56
art_rockerd
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 11 años, 8 meses
Puntos: 6
Dos Combobox Dependientes de Uno

Hola compañeros, he estado bastantes días batallando con este código, no logro averiguar como hacerlo, lo que necesito es que al seleccionar un option de un combo box, los otros dos combobox que tengo se rellenen dinamicamente, lo he logrado hacer con uno, pero no puedo integrar el ultimo combo, el detalle es que no es que sea un combobox de tres niveles, es un combo box de dos niveles, al escoger el primero se deben rellenar los otros dos... este es mi html, es lo que llevo hasta ahorita y si lo prueban podrán ver que solo funciona para rellenar el primero, ya que no se como enviar en el PHP el valor del tercer combo..

Código HTML:
Ver original
  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <!--Creado por Walter en Micodigobeta.com.ar-->
  3. <script src="js/jquery.1.4.2.js" type="text/javascript"></script>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5. <title>Demo - Combos Dependientes </title>
  6. </head>
  7.  
  8.  
  9. function mostrarM(tipo){
  10.         if(tipo=="000"){$('#marca').attr('disabled','disabled');$('#rango').attr('disabled','disabled');return false;}
  11.         $.post("carga_select2.php",{ id:tipo },
  12.         function(data){$('#marca').attr('disabled',''); $("#marca").html(data);})
  13. }
  14. function mostrarR(mark){
  15.         //alert(mark);
  16.         if(mark=="1"){$('#rango').attr('disabled','disabled');return false;}
  17.         $('#rango').attr('disabled','');
  18.         }
  19. $(document).ready(function(){
  20.     $('#marca').attr('disabled','disabled');
  21.     $('#rango').attr('disabled','disabled');
  22. })
  23.  
  24.  
  25. <select name="tipo" id="tipo" onchange="mostrarM(this.value);">
  26.         <option name="seleccione" value="000">SELECCIONE</option>
  27.         <option name="computo" value="C00">COMPUTO</option>
  28.         <option name="plasma" value="P00">PLASMA</option>
  29.  
  30. <select name="marca" id="marca" onchange="mostrarR(this.value);" >
  31. <option value="0">---</option>
  32.  
  33. <select name="rango" id="rango">
  34. <option value="0">---</option>
  35.  
  36. </body>
  37. </html>


el PHP es el siguiente:
Código PHP:
Ver original
  1. <?php
  2.     function carga_combo($Area){
  3.             //realizamos la consulta
  4.             switch($Area){
  5.                 case '000':
  6.                     echo "<option value='0'><--SELECCIONE ANTES</option>";
  7.                     break;
  8.                 case 'C00':
  9.                     include "conexion.php";
  10.                         $query = "SELECT marca FROM marcas WHERE cod_prod='C00'";
  11.                         $query2 = "SELECT descripcion FROM rangos WHERE clave_rango LIKE '%c%'";
  12.                         $ejecuta = mysql_query($query2, $conexion) or die(mysql_error());
  13.                         $ejecuta2 = mysql_query($query, $conexion) or die(mysql_error());
  14.                         while ($row= mysql_fetch_array($ejecuta)) {
  15.                             $rangos= $row['descripcion'];
  16.                             }
  17.                         $i="";
  18.                         //NECESITO ENVIAR EL RESULTADO DE ejecuta y ejecuta2!!!!
  19.                         //pero solo logro enviar ejecuta :/  
  20.                         while ($row= mysql_fetch_array($ejecuta2)) {
  21.                             $marca= $row['marca'];
  22.                             $i=$i+1;
  23.                             echo "<option value=".$i.">".$marca."</option>";
  24.                         }
  25.                        
  26.                     break;
  27.                 case 'P00':
  28.                     include "conexion.php";
  29.                     $query = "SELECT marca FROM marcas WHERE cod_prod='P00'";
  30.                     $ejecuta = mysql_query($query, $conexion) or die(mysql_error());
  31.                     $i="";
  32.                     while ($row= mysql_fetch_array($ejecuta)) {
  33.                         $marca= $row['marca'];
  34.                         $i=$i+1;
  35.                         echo "<option value=".$i.">".$marca."</option>";
  36.                     }
  37.                     break;
  38.             }//end switch  
  39. }//end function
  40.  
  41. if (isset($_POST['id'])){
  42.                     //lee las variables del $.post() de jQuery
  43.                     carga_combo($_POST['id']);
  44.                 }
  45. ?>

ya intente JSON, pero aun así no logro enviarlo ya que no se como tratar estos datos en mi JS, puesto que JSON me lo envía separado por comas, pero aparte tengo que separar por array, y APARTE el simbolo "\" del <\option> me lo cambia por un símbolo tipo V.

Me ayuda por favor!!!
lo que quisiera es que en el evento onChange del primer combo me rellenara los dos combos dependientes, el evento onChange del segundo combobox lo que hace es solo habilitar o des habilitar el tercero. Ojala puedan apoyarme, quedo en espera de su amable ayuda.

Les coloco el script de la bdd para hacer pruebas:
Código MySQL:
Ver original
  1. create database pruebas;
  2.  
  3. CREATE TABLE rangos(
  4.     clave_rango varchar(5),
  5.     descripcion varchar(50),
  6.     CONSTRAINT PK primary key (clave_rango)
  7. );
  8. CREATE TABLE marcas(
  9. cod_prod varchar(10),
  10. marca varchar(40)
  11. );
  12.  
  13. INSERT INTO rangos(clave_rango,descripcion)  VALUES ("1c","0-7500"),
  14. ("2c","7501-10000"),
  15. ("3c",">10000"),
  16. ("1p","0-7500"),
  17. ("2p","7501-10000"),
  18. ("3p","10001-15000"),
  19. ("4p","15001-20000"),
  20. ("5p","20001-30000");
  21.  
  22. ("C00","SELECCIONE.."),
  23. ("C00","ACER"),
  24. ("C00","APPLE"),
  25. ("C00","ASUS"),
  26. ("C00","BENQ"),
  27. ("C00","DELL"),
  28. ("C00","HP"),
  29. ("C00","LANIX"),
  30. ("C00","LENOVO"),
  31. ("C00","LG"),
  32. ("C00","MSI"),
  33. ("C00","PANASONIC"),
  34. ("C00","SAMSUNG"),
  35. ("C00","SONY"),
  36. ("C00","TOSHIBA"),
  37. ("P00","SELECCIONE.."),
  38. ("P00","LG"),
  39. ("P00","SAMSUNG"),
  40. ("P00","SONY"),
  41. ("P00","SHARP");

Última edición por art_rockerd; 20/12/2012 a las 16:59 Razón: Agregar scrpt de bdd