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

URGENTE!! ayuda con combos ligados-dependientes

Estas en el tema de URGENTE!! ayuda con combos ligados-dependientes en el foro de Frameworks JS en Foros del Web. Leyendo en la comunidad pues no he encontrado un tema q me ayude con el problema q estoy presentando con unos combos dependientes. tengo una ...
  #1 (permalink)  
Antiguo 17/12/2007, 11:56
 
Fecha de Ingreso: diciembre-2007
Mensajes: 6
Antigüedad: 16 años, 4 meses
Puntos: 0
URGENTE!! ayuda con combos ligados-dependientes

Leyendo en la comunidad pues no he encontrado un tema q me ayude con el problema q estoy presentando con unos combos dependientes.

tengo una pagina donde muestro los datos ingresados previamente de otra por ejemplo los datos de un una declaracion de desechos (gerencia generadora, planta generadora, unidad generadora, equipo generador, tipo de desecho, unidad, estado fisico, peligrosidad, etc) ahora donde muestro los datos ingresados existe un boton editar el cual hace lo siguiente: hace un llamado a un objeto ajax donde busco los datos del vehiculo por su id y luego voy a ir mostrando los datos por ejemplo planta y su combo o lista con la planta generadora guardada, la unidad y así sucesivamente.

el problema se origina especificamente cuando creo un combo(por js) hago un llamado a una funcion que crea un objeto ajax el cual me va a cargar los datos del combo y luego le añade las opciones con los resultados.. si son varios combos como es mi caso.. cuando estoy generando el primero y por ajax buscando los datos a cargar.. se genera el el segundo combo y tambien hace su llamado respectivo lo cual hace que el objeto ajax se interrumpa y no cargue ningun combo salvo el ultimo obviamente por que ya no tiene peticiones.

Bueno me gustaría saber si alguien tiene una idea de como solucionar este incoveniente o otra forma de hacerlo se los agradeceria muchisimo!!!!!!!!!
  #2 (permalink)  
Antiguo 17/12/2007, 14:07
Avatar de foreverOdd  
Fecha de Ingreso: noviembre-2007
Ubicación: Caracas
Mensajes: 489
Antigüedad: 16 años, 5 meses
Puntos: 14
Re: URGENTE!! ayuda con combos ligados-dependientes

Hola, pon tu codigo para darte una ayudita.
  #3 (permalink)  
Antiguo 17/12/2007, 14:42
 
Fecha de Ingreso: diciembre-2007
Mensajes: 6
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: URGENTE!! ayuda con combos ligados-dependientes

ok... a principio... tengo este js que es llamado al hacer clic en un link:

Código:
//FUNCION QUE PERMITE MOSTRAR DATOS EN FORMULARIO
function mostrarDatos(linea,ini,final){
	enc=false;
	count=0;
	ele=0;
	do{
		if (matriza[count][ele]==linea){
			enc=true;
			lineaT=linea;
			alert("yes");
			document.getElementById("EditarT").style.display='block';
			document.getElementById("mas").style.display='none';
			pos=count;
			for (i=ini; i<=final; i++){
 				ele++;
				switch (document.formulario.elements[i].type) {
					case 'select-one':
                                                cargaContenido(**aqui envio el id del combo **);
						document.formulario.elements[i].value = matriza[count][ele];
				break
					case 'text':
						document.formulario.elements[i].value = matriza[count][ele];
				break
				}
			}
		}
		count++;
	}while(enc==false);
	mostrar();
	//guardar(texto2,texto11);
//	limpiarCampos((document.getElementById('cuerpoTabla').getElementsByTagName('input').length)+ninput);
}
luego... tengo el js de los SELECTS LIGADOS:

Código:
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=null;
	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)
		{
			if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp=new XMLHttpRequest();
		}
	}
	return xmlhttp; 
}

// Declaro los selects que componen el documento HTML. Su atributo ID debe figurar aqui.
var listadoSelects=new Array();
listadoSelects[0]="selectGG";
listadoSelects[1]="selectPG";
listadoSelects[2]="selectUG";
listadoSelects[3]="selectEG";
listadoSelects[4]="selectPelig";
listadoSelects[5]="selectEEP";

function buscarEnArray(array, dato)
{
	// Retorna el indice de la posicion donde se encuentra el elemento en el array o null si no se encuentra
	var x=0;
	while(array[x])
	{
		if(array[x]==dato) return x;
		x++;
	}
	return null;
}

function cargaContenido(idSelectOrigen)
{
if (idSelectOrigen!='selectEG'){
// Obtengo la posicion que ocupa el select que debe ser cargado en el array declarado mas arriba
	var posicionSelectDestino=buscarEnArray(listadoSelects, idSelectOrigen)+1;
	// Obtengo el select que el usuario modifico
	var selectOrigen=document.getElementById(idSelectOrigen);
	
	// Obtengo la opcion que el usuario selecciono
	var opcionSeleccionada=selectOrigen.options[selectOrigen.selectedIndex].value;
	// Si el usuario eligio la opcion "Elige", no voy al servidor y pongo los selects siguientes en estado "Selecciona opcion..."
	if(opcionSeleccionada==0)
	{
		var x=posicionSelectDestino, selectActual=null;
		// Busco todos los selects siguientes al que inicio el evento onChange y les cambio el estado y deshabilito
		while(listadoSelects[x])
		{
			selectActual=document.getElementById(listadoSelects[x]);
			selectActual.length=0;
			
			var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="[SELECCIONE]";
			selectActual.appendChild(nuevaOpcion);	selectActual.disabled=true;
			x++;
		}
	}
	// Compruebo que el select modificado no sea el ultimo de la cadena
	else if(idSelectOrigen!=listadoSelects[listadoSelects.length-1])
	{
		// Obtengo el elemento del select que debo cargar
		var idSelectDestino=listadoSelects[posicionSelectDestino];
		var selectDestino=document.getElementById(idSelectDestino);
		// Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
		var ajax=nuevoAjax();
		
			
		ajax.open("GET", "../controladores/selectsLigados.php?select="+idSelectDestino+"&opcion="+opcionSeleccionada, true);
		ajax.onreadystatechange=function() 
		{ 
			if (ajax.readyState==1)
			{
				// Mientras carga elimino la opcion "Selecciona Opcion..." y pongo una que dice "Cargando..."
				selectDestino.length=0;
				var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Cargando...";
				selectDestino.appendChild(nuevaOpcion); selectDestino.disabled=true;	
			}
			if (ajax.readyState==4)
			{
				selectDestino.parentNode.innerHTML=ajax.responseText;
			} 
		}
		ajax.send(null);
		//alert(ajax);
	}
}
}
y alli llama a selectLigados.php:

Código PHP:
<?php
//header("Cache-Control: no-store, no-cache, must-revalidate");
// Array que vincula los IDs de los selects declarados en el HTML con el nombre de la tabla donde se encuentra su contenido
include_once("../controladores/Conexion.php");
include_once(
"../controladores/GestionBD.php");
include_once(
"../modelos/GGeneradora.php");
include_once(
"../modelos/PGeneradora.php");
include_once(
"../modelos/UGeneradora.php");
include_once(
"../modelos/EGenerador.php");
include_once(
"../modelos/peligrosidad.php");

$ggeneradora= new GGeneradora();
$pgeneradora= new PGeneradora();
$ugeneradora= new UGeneradora();
$egenerador= new EGenerador();
$peligrosidad= new Peligrosidad();
$gestionBD=new GestionBD($ggeneradora);    

$listadoSelects=array(
"selectGG"=>$ggeneradora->gTabla(),
"selectPG"=>$pgeneradora->gTabla(),
"selectUG"=>$ugeneradora->gTabla(),
"selectEG"=>$egenerador->gTabla(),
"selectPelig"=>"",
"selectEEP"=>$peligrosidad->gTabla()
);

function 
validaSelect($selectDestino)
{
    
// Se valida que el select enviado via GET exista
    
global $listadoSelects;
    if(isset(
$listadoSelects[$selectDestino])) return true;
    else return 
false;
}

/*function validaOpcion($opcionSeleccionada)
{
    // Se valida que la opcion seleccionada por el usuario en el select tenga un valor numerico
    echo $opcionSeleccionada;
    if(is_numeric($opcionSeleccionada)) return true;
    else return false;
}*/

$selectDestino=$_GET['select']; 
$opcionSeleccionada=$_GET['opcion'];

//if(validaSelect($selectDestino) && validaOpcion($opcionSeleccionada))
if(validaSelect($selectDestino))
{
    
$tabla=$listadoSelects[$selectDestino];
    switch (
$selectDestino){
        case 
'selectPG'
                
$pgeneradora->setID('co_gerencia');
                
$consulta=$gestionBD->consultarReg($pgeneradora,$opcionSeleccionada);
            break;
        case 
'selectUG'
                
$ugeneradora->setID('co_planta');
                
$consulta=$gestionBD->consultarReg($ugeneradora,$opcionSeleccionada);
            break;
        case 
'selectEG'
                
$egenerador->setID('co_unidad');
                
$consulta=$gestionBD->consultarReg($egenerador,$opcionSeleccionada);
            break;
        case 
'selectEEP'
                
$egenerador->setID('tx_eqprotector');
                
$consulta=$gestionBD->consultarReg($peligrosidad,$opcionSeleccionada);
                
            break;
        default: break;
    }

    
// Comienzo a imprimir el select
    
echo "<select name='".$selectDestino."' id='".$selectDestino."' onChange='cargaContenido(this.id)' style='width:98%'>";
    echo 
"<option value='0'>[SELECCIONE]</option>";
    
    while(
$registro=Conexion::obtenerDatos($consulta)){
        
// Convierto los caracteres conflictivos a sus entidades HTML correspondientes para su correcta visualizacion
        
$registro[1]=htmlentities($registro[1]);
        
// Imprimo las opciones del select
        
echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
    }            
    echo 
"</select>";
    
}
?>
.... de esta manera lo haria por cada combo y pues se mostraria en el VALUE la opcion seleccionada dependiendo a la almacenada en BD... que esta provisionalmente almacenada en una matriz js... q se llama "matriza" .... pero no hace el value porque antes no ha terminado de cargar el comboBox..!
  #4 (permalink)  
Antiguo 17/12/2007, 14:49
 
Fecha de Ingreso: diciembre-2007
Mensajes: 6
Antigüedad: 16 años, 4 meses
Puntos: 0
Pregunta Re: URGENTE!! ayuda con combos ligados-dependientes

... un amigo me dio una "solucion" ... y es que al cargar la pagina cargue en los combos todo lo q esta en la BD, claro de su identificador... y cuando le de click a EDITAR de un desecho, en este caso... pues si cargara en SELECTED el value correspondiente a lo almacenado en BD sin problemas.

El problema esta en que como loc combos no quedan filtrados el usuario podra elegir una opcion que kizas no tenga que ver con la anterior es decir, kizas en el combo 2 elija C y esa no deberia de estar puesto la informacion escogida en el combo 1 no tiene que ver con ella... entonces nos encontramos con que el usuario podra elegir opciones erroneas...

como haria para despues que haya cargado tanto la info almacenada en la bd por cada combo como el haber reflejado en el value del combo la opcion segun a la solicitud previamente almacenada por el usuario filtrandolo todo... es decir sacando el combo las opciones que no pertenezcan al combo anterior
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 06:55.