Foros del Web » Programando para Internet » Javascript » Frameworks JS »

4 Combos dependientes

Estas en el tema de 4 Combos dependientes en el foro de Frameworks JS en Foros del Web. Hola, estoy intentando modificar el script de http://www.formatoweb.com.ar/ajax/se..._3_niveles.php para que pueda tener un combo mas, creo que es sencillo pero no logro hacerlo de manera ...
  #1 (permalink)  
Antiguo 07/11/2006, 20:24
Avatar de lisandro Arg  
Fecha de Ingreso: octubre-2003
Ubicación: Cordoba, Argentina
Mensajes: 945
Antigüedad: 20 años, 6 meses
Puntos: 24
4 Combos dependientes

Hola, estoy intentando modificar el script de http://www.formatoweb.com.ar/ajax/se..._3_niveles.php

para que pueda tener un combo mas, creo que es sencillo pero no logro hacerlo de manera correcta, pueden echarle una mirada ?

combos.php
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<?php
function generaSelect()
{
 
$coneccion=mysql_connect("localhost""root""") or die(mysql_error());
 
mysql_select_db("directorio_x4"$coneccion) or die(mysql_error());
 
$consulta=mysql_query("SELECT * FROM idx_category WHERE parent_id=0");
 
mysql_close($coneccion);
 
// Voy imprimiendo el primer select compuesto por los registros obtenidos
 
echo "<select class='combo' id='select_1' name='select_1' onChange='cargaContenido(2)'>";
 echo 
"<option value='0'>Elige</option>";
 while(
$registro=mysql_fetch_row($consulta))
 {
  echo 
"<option value='$registro[0]'>$registro[2]</option>";
 }
 echo 
"</select>";
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ejemplo</title>
<script language="javascript" type="text/javascript">
function nuevoAjax()

 /* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo, por
 lo que se puede copiar tal como esta aqui */
 var xmlhttp=false; 
 try 
 { 
  // Creacion del objeto AJAX para navegadores no IE
  xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
 }
 catch(e)
 { 
  try
  { 
   // Creacion del objet AJAX para IE 
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
  } 
  catch(E) { xmlhttp=false; }
 }
 if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp=new XMLHttpRequest(); } 
 return xmlhttp; 
}
function cargaContenido(selectACargar)
{
 // Recibo el número correspondiente al combo que se debe llenar de datos
 var selectAnterior=selectACargar-1; // Obtengo el número del combo que activó el evento onChange
 // Extraigo el valor del combo que se ha cambiado
 var valor=document.getElementById("select_"+selectAnterior).options[document.getElementById("select_"+selectAnterior).selectedIndex].value;
 var elemento;
 
 if(valor!=0)
 {
  ajax=nuevoAjax();
  // Envio al servidor el valor seleccionado y el combo al cual se le deben poner los datos
  ajax.open("GET", "select_dependientes_3_niveles_proceso.php?seleccionado="+valor+"&select="+selectACargar, true);
  ajax.onreadystatechange=function() 
  { 
   if (ajax.readyState==1)
   {
    // Mientras carga elimino la opcion "Elige" y pongo una que dice "Cargando"
    elemento=document.getElementById("select_"+selectACargar);
    elemento.length=0;
    var opcionCargando=document.createElement("option"); opcionCargando.value=0; opcionCargando.innerHTML="Cargando...";
    elemento.appendChild(opcionCargando); elemento.disabled=true; 
   }
   if (ajax.readyState==4)
   {
    // Coloco en la fila contenedora los datos que recivo del servidor
    document.getElementById("fila_"+selectACargar).innerHTML=ajax.responseText;
   } 
  }
  ajax.send(null);
 }
 
 /* Colocamos mediante los whiles los selects en "Selecciona opción..." cuando el select anterior
 ha quedado en estado "Elige" */
 var x=1, y=null;
 while(x<=2)
 {
  valor=document.getElementById("select_"+x).options[document.getElementById("select_"+x).selectedIndex].value;
  if(valor==0)
  {
   while(x<=2) 
   {
    y=x+1;
    elemento=document.getElementById("select_"+y);
    elemento.length=0;
    var opcionSelecciona=document.createElement("option"); opcionSelecciona.value=0; opcionSelecciona.innerHTML="Selecciona opci&oacute;n...";
    elemento.appendChild(opcionSelecciona); elemento.disabled=true;
    x++;
   }
  }
  x++;
 }
 
}
</script>
<style type="text/css"> 
.punteado 

 border-style:dotted; 
 border-color:#000000; 
 background-color:#EAEAEA;
 font-family:Verdana; 
 font-size:10px; 
 text-align:center;
}
.combo
{
 font-family:Verdana; 
 font-size:10px; 
 border-color:#CCCCCC;
}
</style>
</head>
<body>
<center>
<table border="1" width="600px" style="border-style:none;">
  <tr>
    <td id="fila_1" width="200px" class="punteado"><?php generaSelect(); ?></td>
 <td id="fila_2" width="200px" class="punteado">
  <select class="combo" disabled="disabled" id="select_2" name="select_2">
  <option id="valor_defecto" value="0">Selecciona opci&oacute;n...</option>
  </select>
 </td>
 <td id="fila_3" width="200px" class="punteado">
  <select class="combo" disabled="disabled" id="select_3" name="select_3">
  <option id="valor_defecto" value="0">Selecciona opci&oacute;n...</option>
  </select>
 </td>
  </tr>
</table>
</center>
</body>
</html>
procesaCombos.php
Código PHP:
<?php
function validaEntrada($valor$selectACargar)
{
 
// Funcion utilizada para validar el numero recibido por GET.
 
if($selectACargar==&& $valor>=&& $valor<=4
  return 
TRUE;
 elseif(
$selectACargar==&& $valor>=&& $valor<=12
  return 
TRUE;
 else return 
TRUE;
}
$valor=$_GET["seleccionado"]; $selectACargar=$_GET["select"];
if(
validaEntrada($valor$selectACargar))
{
 
// Si el numero corresponde a un codigo de pais valido paso a procesar
 
$coneccion=mysql_connect("localhost""root""") or die(mysql_error());
 
mysql_select_db("directorio_x4"$coneccion) or die(mysql_error());
 
// Genero la consulta trayendo todos los estados que correspondan al codigo de pais elegido
 
$consulta=mysql_query("SELECT * FROM idx_category WHERE parent_id=$valor");
 
mysql_close($coneccion);
 
// Comienzo a imprimir el select
 
if($selectACargar==2
  echo 
"<select class='combo' onChange='cargaContenido(3)' id='select_$selectACargar' name='select_$selectACargar'>";
 else
  echo 
"<select class='combo' id='select_$selectACargar' name='select_$selectACargar'>";  
 
 echo 
"<option value='0'>Elige</option>";
 while(
$registro=mysql_fetch_row($consulta))
 {
  
// Paso a HTML acentos y ñ para su correcta visualizacion
  
$registro[2]=htmlentities($registro[2]);
  
// Imprimo las opciones del select
  
echo "<option value='$registro[0]'>$registro[2]</option>";
 }   
 echo 
"</select>";
}
?>
  #2 (permalink)  
Antiguo 08/11/2006, 06:24
 
Fecha de Ingreso: noviembre-2006
Mensajes: 9
Antigüedad: 17 años, 5 meses
Puntos: 0
si te fijas bien tienes
onChange='cargaContenido(2)
onChange='cargaContenido(3) y te falta un cuarto cuando valor de $selectACargar==3

mira mi procesaCombos.php si te sirve de algo

<?
$valor=$_GET["seleccionado"]; $selectACargar=$_GET["select"];
$ccosto=$_GET["select1"];
//if(validaEntrada($valor, $selectACargar))
//{
//
// Si el numero corresponde a un codigo de pais valido paso a procesar
$conexion = mssql_connect("Flex", "flexline", "flexline") or die("No se pudo conectar con el servidor!!!");
if($selectACargar==2){
// Genero la consulta trayendo todos los estados que correspondan al codigo de pais elegido
$consulta = mssql_query("select distinct s.cod_item,u.descripcion from con_asociacc s, gen_tabcod u where s.cod_ccosto='$valor' and s.empresa='001'
and u.tipo='con_item' and s.empresa=u.empresa and u.codigo=cod_item order by descripcion",$conexion);

$aux=$ccosto;
}

if($selectACargar==3){
// Genero la consulta trayendo todos los estados que correspondan al codigo de pais elegido
$consulta = mssql_query("SELECT distinct a.cod_subitem, b.descripcion
FROM con_asociacc a join gen_tabcod b on b.codigo=a.cod_subitem
WHERE a.empresa='001'
and b.empresa='001'
and a.cod_ccosto='$ccosto'
and a.cod_item='$valor'
and b.tipo='GOL_SUBITEM'
order by b.descripcion",$conexion);}

//mssql_close($conexion);and a.cod_item='$itemgasto' and a.cod_ccosto='$valor'
///////////////////////////////////////
if($selectACargar==2)
echo "<select class='combo' onChange='cargaContenido(3,$aux)' id='select_$selectACargar' name='select_$selectACargar'>";
else
echo "<select class='combo' id='select_$selectACargar' name='select_$selectACargar'>";

echo "<option value='0'>Elige</option>";
while($registro=mssql_fetch_row($consulta))
{
// Paso a HTML acentos y ñ para su correcta visualizacion
$registro[1]=htmlentities($registro[1]);
// Imprimo las opciones del select
echo "<option value='$registro[0]'> $registro[0] - $registro[1]</option>";
} //$ccosto ($valor)
echo "</select>";
//}////////////////////////////////////////////////////////////


?>
  #3 (permalink)  
Antiguo 08/11/2006, 06:38
Avatar de lisandro Arg  
Fecha de Ingreso: octubre-2003
Ubicación: Cordoba, Argentina
Mensajes: 945
Antigüedad: 20 años, 6 meses
Puntos: 24
me lo llevo a la oficina a probarlo, despues te digo que tal me fue, gracias !!
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 15:39.