Ver Mensaje Individual
  #12 (permalink)  
Antiguo 01/02/2014, 16:25
mktalternativa
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Select asociados con datos de php

pude poner todo en el index y que funcione el unico problema que tengo es que cuando selecciono alguna opcion del primer select me abre dos select mas y yo solo quiero que modifique el contenido de los ya existentes


que puedo hacer

Código PHP:

<?php get_header(); ?>

<script>

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]="paises";
listadoSelects[1]="estados";

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&oacute;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", "index.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);
    }
}

</script>

<?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(
"paises"=>"lista_paises",
"estados"=>"lista_estados"
);

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

}

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

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

if(
validaSelect($selectDestino) && validaOpcion($opcionSeleccionada))
{

    echo 
$ops;
    

  
$args2 = array(
    
'sort_order' => 'ASC',
    
'sort_column' => 'post_title',
    
'hierarchical' => 1,
    
'exclude' => '',
    
'include' => '',
    
'meta_key' => '',
    
'meta_value' => '',
    
'authors' => '',
    
'child_of' => $ops,
    
'parent' => -1,
    
'exclude_tree' => '',
    
'number' => '',
    
'offset' => 0,
    
'post_type' => 'page',
    
'post_status' => 'publish'
); 


    
    
// Comienzo a imprimir el select
    
echo "<select name='".$selectDestino."' id='".$selectDestino."' onChange='cargaContenido(this.id)'>";
    echo 
"<option value='0'>Elige</option>";
      
$pages2 get_pages$args2 ); 
  foreach ( 
$pages2 as $page2 ) {
      
$option2 '<option value="' get_page_link$page2->ID ) . '">';
    
$option2 .= $page2->post_title;
    
$option2 .= '</option>';
    echo 
$option2;
  }
  
    echo 
"</select>";
    
}


?>
    
<!--Encabezado -->
<?php
function generaPaises()
{
?>    
  <select name="paises"
 onchange='cargaContenido(this.id)' id="paises"> 
 <option value="">
<?php echo esc_attr__'Seleccionar destino' ) ); ?></option> 
 <?php 
 
 $args 
= array(
    
'sort_order' => 'ASC',
    
'sort_column' => 'post_title',
    
'hierarchical' => 1,
    
'exclude' => 10,
    
'include' => '',
    
'meta_key' => '',
    
'meta_value' => '',
    
'authors' => '',
    
'child_of' => 0,
    
'parent' => -1,
    
'exclude_tree' => '',
    
'number' => '',
    
'offset' => 0,
    
'post_type' => 'page',
    
'post_status' => 'publish'
); 
  
$pages get_pages$args ); 
  foreach ( 
$pages as $page ) {
      
$option '<option value="' .  $page->ID  '">';
    
$option .= $page->post_title;
    
$option .= '</option>';
    echo 
$option;
  }
 
?>
 </select>
 <?php
  
}
?>




<div id="demo" style="width:600px;">
                <div id="demoDer">
                    <select disabled="disabled" name="estados" id="estados">
                        <option value="0">Selecciona opci&oacute;n...</option>
                    </select>
                </div>
                <div id="demoIzq"><?php generaPaises(); ?></div>
            </div>