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=0; i<mis_provincias.length; i++){
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 state= document.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.