Foros del Web » Programando para Internet » Javascript »

Dividir la ejecucion de la funcion para ampliar funcionalidad

Estas en el tema de Dividir la ejecucion de la funcion para ampliar funcionalidad en el foro de Javascript en Foros del Web. Hola, la function cargaContenido(idSelectOrigen) de este codigo que adjunto, es llamada desde varios selects y su funcionalidad es la de comprobar que no sea el ...
  #1 (permalink)  
Antiguo 22/10/2012, 03:45
 
Fecha de Ingreso: marzo-2011
Mensajes: 18
Antigüedad: 13 años, 1 mes
Puntos: 0
Dividir la ejecucion de la funcion para ampliar funcionalidad

Hola, la function cargaContenido(idSelectOrigen) de este codigo que adjunto, es llamada desde varios selects y su funcionalidad es la de comprobar que no sea el ultimo select y ejecutar la llamada para cargar el siguiente select con los datos desde la base de datos.
Lo que yo necesitaria es que al comprobar el select a cargar, si es el ultimo ejecutar la consulta de forma independiente, no la que esta realizando al ir cargando los selects. no se si me estoy explicando demasiado bien.
En definitiva para lo que quiero que esto sea asi es para que al generar el select con php poder poner una funcion diferente onChange=loquesea(this.id) solo en el ultimo select.
alguien me puede guiar como puedo hacerlo?
El fichero AJAX JAVASCRIPT
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=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)
		{
			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]="select1";
listadoSelects[1]="select2";
listadoSelects[2]="select3";
listadoSelects[3]="select4";

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)
{
	// 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="Selecciona Opción...";
			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", "select_dependientes_3_niveles_proceso.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);
	}
}
El archivo PHP
Código PHP:
<?php
// Array que vincula los IDs de los selects declarados en el HTML con el nombre de la tabla donde se encuentra su contenido
$listadoSelects=array(
"select1"=>"Financiado",
"select2"=>"Terminal",
"select3"=>"terminalesfin",
"select4"=>"Portabilidad"
);

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
    
if(is_string($opcionSeleccionada)) return true;
    else return 
false;
}

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

if(
validaSelect($selectDestino) && validaOpcion($opcionSeleccionada))
{
    
$tabla="terminalesfin";
    include 
'conexion.php';
    
conectar();
    
$consulta='';
    if(
$selectDestino=='select2')
    {
    
$consulta=mysql_query("SELECT ID_terminalfin, planprecios FROM $tabla WHERE  portabilidad ='$opcionSeleccionada' GROUP BY planprecios") or die(mysql_error());
    
desconectar();    
        }
    
     else if(
$selectDestino=='select3')
    {
    
$consulta=mysql_query("SELECT ID_terminalfin, terminal FROM $tabla WHERE  planprecios ='$opcionSeleccionada' GROUP BY terminal") or die(mysql_error());
    
desconectar();    
        }   
        else if(
$selectDestino=='select4')
    {
    
$consulta=mysql_query("SELECT ID_terminalfin, financiado FROM $tabla WHERE  terminal ='$opcionSeleccionada' GROUP BY financiado") or die(mysql_error());
    
desconectar();    
        } 
    
// Comienzo a imprimir el select
    
echo "<select name='".$selectDestino."' id='".$selectDestino."' onChange='cargaContenido(this.id)'>";
    echo 
"<option value='0'>Elige</option>";
    while(
$registro=mysql_fetch_row($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[1]."'>".$registro[1]."</option>";
       
$ide= ($registro[0]);
    }            
    echo 
"</select>";
  
}

?>
y el donde estan los selects que se cargaran
Código PHP:
<?php
function generaSelect()
{
    include 
'conexion.php';
    
conectar();
    
$consulta=mysql_query("SELECT * FROM terminalesfin GROUP BY portabilidad");
    
desconectar();

    
// Voy imprimiendo el primer select compuesto por los paises
    
echo "<select name='select1' id='select1' onChange='cargaContenido(this.id)'>";
    echo 
"<option value='0'>Elige</option>";
    while(
$registro=mysql_fetch_row($consulta))
    {
        echo 
"<option value='".$registro[5]."'>".$registro[5]."</option>";
    }
    echo 
"</select>";
}
?>
<link rel="stylesheet" type="text/css" href="select_dependientes_3_niveles.css">
<script type="text/javascript" src="select_dependientes_3_niveles.js"></script>
</head>

<body>
<form  method="post" action="resultado.php">
            <div id="demo" style="width:800px;">
            
                    <div id="demoDer">
                    <select disabled="disabled" name="select4" id="select4">
                        <option value="0">Selecciona opci&oacute;n...</option>
                    </select>
                </div>
                
                <div id="demoDer">
                
                    <select disabled="disabled" name="select3" id="select3">
                        <option value="0">Selecciona opci&oacute;n...</option>
                    </select>
                </div>
                <div id="demoMed">
                    <select disabled="disabled" name="select2" id="select2">
                        <option value="0">Selecciona opci&oacute;n...</option>
                    </select>
                </div>
                <div id="demoIzq"><?php generaSelect(); ?></div>
            </div>
           

</form>
  #2 (permalink)  
Antiguo 22/10/2012, 10:42
 
Fecha de Ingreso: marzo-2011
Mensajes: 18
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Dividir la ejecucion de la funcion para ampliar funcionalidad

he encontrado la solucion pero haciendo cambios en el archivo de php haciendo lo siguiente:

he modificado la instruccion de cargar los selects separando el ultimo de esta manera

Código PHP:
 if($selectDestino!='select4'
    {
    echo 
"<select name='".$selectDestino."' id='".$selectDestino."' onChange='cargaContenido(this.id)'>";
    echo 
"<option value='0'>Elige</option>";
    while(
$registro=mysql_fetch_row($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[1]."'>".$registro[1]."</option>";
       
$ide= ($registro[0]);
    }            
    echo 
"</select>";
    }
   elseif(
$selectDestino=='select4')
   {
    echo 
"<select name='".$selectDestino."' id='".$selectDestino."'>";
    echo 
"<option value='0'>Elige</option>";
    while(
$registro=mysql_fetch_row($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[0]."</option>";
       
$ide= ($registro[0]);
    }            
    echo 
"</select>";    
   } 
espero que os sirva.

Etiquetas: ajax, dividir, ejecucion, funcion, html, js, php, select
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 22:00.