Ver Mensaje Individual
  #4 (permalink)  
Antiguo 01/05/2007, 17:20
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 3 meses
Puntos: 45
Re: Problemas con select dinámicos

Una cosa, a veces me ocurre que al hacer un copy paste de un código se me copia en una sola línea, como en el ultimo post tuyo regiomaster, y no sé por qué puede ser. En tu primer post si que estaba el código identado y bien en sus renglones, pero en este caso no.

Bueno, al final lo conseguí poner todo como sale en los foros para trabajar con él.

Me he fijado en que no cierras los <OPTION>, todas las etiquetas (x)HTML han de ir cerradas, incluso las que no tienen cierre (<br />).

Funciona en FF2 y en IE, ojo al detalle que si seleccionamos México y, por ejemplo, Aguascalientes, se muestran las ciudades. Después cambiamos México por extranjero, y se limpian las provincias, pero no así las ciudades.


Cita:
Iniciado por regiomaster
El problema surge cuando selecciono una provincia o una ciudad y realizo la busqueda, ya que se vacian los select llenados dinamicamente, cuando deberia quedar llena con los nombres de los estados y ciudades y con la opcion elegida seleccionada.
¿Qué action tienes en el FORM? Los datos llegan bien a la página de búsqueda ¿no?

Si te refieres a que el action lo tienes en la misma página, y que quieres que estén los selects como estaban al pulsar el botón de búsqueda, se me ocurren varias maneras:
- Por PHP lees lo que se ha mandado, y escribes en el documento una variable de estado javascript. Esa variable javascript (esas variables) modificarán los selects en la carga de la página para que los selects se muestren como se ha seleccionado anteriormente.
- Lees qué se ha enviado por javascript (lo malo de este método es que sólo se puede si lo haces con GET).
- Guardas una cookie para conservar el estado de los selects cuando se pulsó buscar (un poco engorroso quizás).


De paso te he cerrado las etiquetas y te he retocado la manera de agregar opciones y de borrarlas, haciendo el código un poco más elegante y cortito:

Código PHP:
<form name="AdminForm2">

<
select name="country" onChange="cambia_provincia()" size="1">
    <
option value="0">Seleccione</option>
    <
option value="México" >México</option>
    <
option value="Extranjero" >Extrajero</option>
</
select>
<
select name="state" onChange="cambia_city()" size="1">
    <
option value="0">Seleccione</option>
</
select>
<
select name="city" size="1" >
    <
option value="0" >Seleccione</option>
</
select>
<
input type="submit" value="Buscar" />

</
form>

<
script>
//defino una serie de varibles Array para cada país
var provincias_México=new Array("Seleccione","Aguascalientes""Baja California")
var 
provincias_Extranjero=new Array("No disponible")

//función que cambia las provincias del select de provincias en función del país que se haya escogido en el select de país.
function cambia_provincia(){
    
//tomo el valor del select del pais elegido
    
var country document.AdminForm2.country[document.AdminForm2.country.selectedIndex].value
    
//miro a ver si el pais está definido
    
if (country != 0) {
        
//si estaba definido, entonces coloco las opciones de la provincia correspondiente.
        //selecciono el array de provincia adecuado
        
mis_provincias=eval("provincias_" country)
        
//para cada provincia del array, la introduzco en el select
        
for(i=0i<mis_provincias.lengthi++){
           
document.AdminForm2.state.options[i]=new Option(mis_provincias[i], mis_provincias[i]);
        }
    }else{
        
//si no había provincia seleccionada, elimino las provincias del select
        
while (document.AdminForm2.state.length 1) {        //borramos todo excepto la primera opción (seleccione)
            
document.AdminForm2.state.options[1]=null;
        }
    }
    
//marco como seleccionada la opción primera de provincia
    
document.AdminForm2.state.options[0].selected true;
    
    
}


var 
citys_1=new Array("Seleccione","Aguascalientes""Rincón de Romos" )
var 
citys_2=new Array("Seleccione","Mexicali""Tijuana","Ensenada""Tecate","Rosarito")

//función que cambia las ciudades del select.
function cambia_city(){
    
//tomo el valor del select de la estado elegido.
    
var statedocument.AdminForm2.state[document.AdminForm2.state.selectedIndex].value
    
//miro a ver si el pais está definido
    
if (state != 0) {
        
//si estaba definido, entonces coloco las opciones de la provincia correspondiente.
        //selecciono el array de provincia adecuado
        
mis_citys=eval("citys_" document.AdminForm2.state.selectedIndex)
        
//para cada provincia del array, la introduzco en el select
        
for(i=0;i<mis_citys.length;i++){
           
document.AdminForm2.city.options[i]=new Option(mis_citys[i],mis_citys[i]);
        }    
    }else{
        
//si no había provincia seleccionada, elimino las provincias del select
        
while (document.AdminForm2.city.length 1) {        //borramos todo excepto la primera opción (seleccione)
            
document.AdminForm2.city.options[1]=null;
        }
    }
    
//marco como seleccionada la opción primera de provincia
    
document.AdminForm2.city.options[0].selected true;
}

</script> 
Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.