Autor Tema: JavaScript selectedIndex Desactivar option select disabled eventos form CU01183E  (Leído 5846 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas tardes.

A continuación hago entrega de la propuesta de solución al ejercicio CU01183E del curso JavaScript desde cero de aprenderaprogramar.

Citar
EJERCICIO

Crear el código HTML y JavaScript que cumpla con las siguientes funciones:

a) Deberá presentarse un formulario con 2 elementos select. El primer elemento select permitirá elegir país y podrá elegirse entre México, España, Perú y Colombia.

b) El segundo elemento select permitirá elegir ciudad y podrá elegirse entre México D.F., Guadalajara, Madrid, Barcelona, Lima, Trujillo, Bogotá y Cali.

c) Si el usuario selecciona ciudad sin haber elegido país, deberá mostrarse como opción elegida de país el país correspondiente a la ciudad. Por ejemplo, si el usuario selecciona Bogotá deberá aparecer como país seleccionado Colombia.

d) Si el usuario selecciona un país en primer lugar, deberán deshabilitarse todas las opciones que no correspondan a ciudades de ese país. Por ejemplo si el usuario elige España, sólo podrá elegir entre Madrid y Barcelona, debiendo estar México D.F., Guadalajara, Lima, Trujillo, Bogotá y Cali deshabilitadas. Si el usuario cambia el país, deberán cambiar las ciudades cuya elección es posible.

e) Ampliación opcional para el ejercicio: introduce medidas de seguridad adicionales para que no puedan existir incoherencias entre el país seleccionado y la ciudad. Por ejemplo, imagina que el usuario elige en primer lugar como ciudad México D.F. y luego elige como país Perú. Introduce medidas de seguridad que impidan que esto suceda.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

window.onload = function(){
selectPais = document.getElementById('pais');
selectCiudad = document.getElementById('ciudad');
selectPais.addEventListener('change', ciudadesCorrespondientes);
selectCiudad.addEventListener('change', paisCorrespondiente);
selectPais[0].addEventListener('click', todosLosPaises);
selectCiudad[0].addEventListener('click', todasLasCiudades);
}

function ciudadesCorrespondientes(){
if(selectPais.value=='mexico'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'mexico df' && selectCiudad[i].value != 'guadalajara'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
if(selectPais.value=='espanya'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'madrid' && selectCiudad[i].value != 'barcelona'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
if(selectPais.value=='peru'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'lima' && selectCiudad[i].value != 'trujillo'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
if(selectPais.value=='colombia'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'bogota' && selectCiudad[i].value != 'cali'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
}

function paisCorrespondiente(){
if(selectCiudad.value == 'mexico df' || selectCiudad.value == 'guadalajara'){
selectPais[1].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'mexico'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
if(selectCiudad.value == 'madrid' || selectCiudad.value == 'barcelona'){
selectPais[2].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'espanya'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
if(selectCiudad.value == 'lima' || selectCiudad.value == 'trujillo'){
selectPais[3].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'peru'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
if(selectCiudad.value == 'bogota' || selectCiudad.value == 'cali'){
selectPais[4].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'colombia'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
}

function todosLosPaises(){
for(var i=1; selectPais.length; i++){
selectPais[i].disabled = false;
}
}

function todasLasCiudades(){
for(var i=1; selectCiudad.length; i++){
selectCiudad[i].disabled = false;
}
}

</script>
</head>
<body>
<select name="pais" id="pais" style="margin-right: 20px;">
<option value="">Elegir país</option>
<option value="mexico">México</option>
<option value="espanya">España</option>
<option value="peru">Peru</option>
<option value="colombia">Colombia</option>
</select>
<select name="ciudad" id="ciudad">
<option value="">Ejegir ciudad</option>
<option value="mexico df">México D.F.</option>
<option value="guadalajara">Guadalajara</option>
<option value="madrid">Madrid</option>
<option value="barcelona">Barcelona</option>
<option value="lima">Lima</option>
<option value="trujillo">Trujillo</option>
<option value="bogota">Bogotá</option>
<option value="cali">Cali</option>
</select>
</body>
</html>

Gracias
« Última modificación: 14 de Enero 2022, 19:08 por Ogramar »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:CU01183E disabled en JavaScript
« Respuesta #1 en: 27 de Abril 2016, 17:42 »
Hola dimiste.

El código no funciona correctamente, una vez que escojo un país y una ciudad, ya no da opción de cambiarlo.

Si escojo primero una ciudad, se selecciona automáticamente el país, hasta ahí bien, pero si el país es por ejemplo 'México' me sigue dejando escoger cualquier ciudad.

Son detalles que solucionarás fácilmente.

Saludos.

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas, pedro,,

Gracias por corregirme el ejercicio y por tu tiempo.

No se en que navegador lo estás probando. A mi me funciona correctamente (probado en firefox y chrome). Para que te vuelva a dejar elegir cualquier país o ciudad tiene que hacer click en: "elegir país" o "elegir ciudad" respectivamente.

Subo el código otra vez a ver si me he equivocado yo en subirlo

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

window.onload = function(){
selectPais = document.getElementById('pais');
selectCiudad = document.getElementById('ciudad');
selectPais.addEventListener('change', ciudadesCorrespondientes);
selectCiudad.addEventListener('change', paisCorrespondiente);
selectPais[0].addEventListener('click', todosLosPaises);
selectCiudad[0].addEventListener('click', todasLasCiudades);
}

function ciudadesCorrespondientes(){
if(selectPais.value=='mexico'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'mexico df' && selectCiudad[i].value != 'guadalajara'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
if(selectPais.value=='espanya'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'madrid' && selectCiudad[i].value != 'barcelona'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
if(selectPais.value=='peru'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'lima' && selectCiudad[i].value != 'trujillo'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
if(selectPais.value=='colombia'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'bogota' && selectCiudad[i].value != 'cali'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
}

function paisCorrespondiente(){
if(selectCiudad.value == 'mexico df' || selectCiudad.value == 'guadalajara'){
selectPais[1].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'mexico'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
if(selectCiudad.value == 'madrid' || selectCiudad.value == 'barcelona'){
selectPais[2].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'espanya'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
if(selectCiudad.value == 'lima' || selectCiudad.value == 'trujillo'){
selectPais[3].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'peru'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
if(selectCiudad.value == 'bogota' || selectCiudad.value == 'cali'){
selectPais[4].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'colombia'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
}

function todosLosPaises(){
for(var i=1; selectPais.length; i++){
selectPais[i].disabled = false;
}
}

function todasLasCiudades(){
for(var i=1; selectCiudad.length; i++){
selectCiudad[i].disabled = false;
}
}

</script>
</head>
<body>
<select name="pais" id="pais" style="margin-right: 20px;">
<option value="">Elegir país</option>
<option value="mexico">México</option>
<option value="espanya">España</option>
<option value="peru">Peru</option>
<option value="colombia">Colombia</option>
</select>
<select name="ciudad" id="ciudad">
<option value="">Ejegir ciudad</option>
<option value="mexico df">México D.F.</option>
<option value="guadalajara">Guadalajara</option>
<option value="madrid">Madrid</option>
<option value="barcelona">Barcelona</option>
<option value="lima">Lima</option>
<option value="trujillo">Trujillo</option>
<option value="bogota">Bogotá</option>
<option value="cali">Cali</option>
</select>
</body>
</html>

Gracias.

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
En chrome no me funciona, en firefox sí, aunque no de la forma correcta.

Elijo un país, 'Perú'
Elijo una ciudad, 'Lima'
Ahora elijo 'Elegir país'
Ahora selecciono 'España'
y en las ciudades sigue estando seleccionada 'Lima'
Así que podría enviar el formulario con los datos mal.

Cuando elijes 'Elegir país', el select de las ciudades debería quedar también en 'Elegir ciudad'.

Saludos.

« Última modificación: 27 de Abril 2016, 19:42 por pedro,, »

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas noches, pedro,,

Uf, me costó corregirlo. Ahora creo que funciona correctamente tanto en chrome, como en firefox.

Gracias por la corrección y la ayuda. Te agredecería si le echarás otro vistazo más :)

Gracias.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

window.onload = function(){
selectPais = document.getElementById('pais');
selectCiudad = document.getElementById('ciudad');
selectPais.addEventListener('change', ciudadesCorrespondientes);
selectCiudad.addEventListener('change', paisCorrespondiente);
}

function ciudadesCorrespondientes(){

if(selectPais.options[selectPais.selectedIndex].value=='mexico'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad.options[i].value != 'mexico df' && selectCiudad[i].value != 'guadalajara'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}
}

if(selectPais.options[selectPais.selectedIndex].value=='espanya'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad.options[i].value != 'madrid' && selectCiudad[i].value != 'barcelona'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}
}

if(selectPais.options[selectPais.selectedIndex].value=='peru'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad.options[i].value != 'lima' && selectCiudad[i].value != 'trujillo'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}
}

if(selectPais.options[selectPais.selectedIndex].value=='colombia'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad.options[i].value != 'bogota' && selectCiudad[i].value != 'cali'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}
}

if(selectPais.selectedIndex==0){
todosLosPaises();
}

}

function paisCorrespondiente(){

if(selectCiudad.options[selectCiudad.selectedIndex].value == 'mexico df' || selectCiudad.options[selectCiudad.selectedIndex].value == 'guadalajara'){
selectPais.options[1].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais.options[i].value != 'mexico'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}
}

if(selectCiudad.options[selectCiudad.selectedIndex].value == 'madrid' || selectCiudad.options[selectCiudad.selectedIndex].value == 'barcelona'){
selectPais.options[2].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais.options[i].value != 'espanya'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}
}

if(selectCiudad.options[selectCiudad.selectedIndex].value == 'lima' || selectCiudad.options[selectCiudad.selectedIndex].value == 'trujillo'){
selectPais.options[3].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais.options[i].value != 'peru'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}
}

if(selectCiudad.options[selectCiudad.selectedIndex].value == 'bogota' || selectCiudad.options[selectCiudad.selectedIndex].value == 'cali'){
selectPais.options[4].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais.options[i].value != 'colombia'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}
}

if(selectCiudad.selectedIndex==0){
todasLasCiudades();
}
}

function todosLosPaises(){
for(var i=0; i<selectPais.length; i++){
selectPais.options[i].disabled = false;
}
selectCiudad.options[0].selected = true;
todasLasCiudades();
}

function todasLasCiudades(){
for(var i=0; i<selectCiudad.length; i++){
selectCiudad.options[i].disabled = false;
}
}

</script>
</head>
<body>
<select name="pais" id="pais" style="margin-right: 20px;">
<option value="">Elegir país</option>
<option value="mexico">México</option>
<option value="espanya">España</option>
<option value="peru">Peru</option>
<option value="colombia">Colombia</option>
</select>
<select name="ciudad" id="ciudad">
<option value="">Ejegir ciudad</option>
<option value="mexico df">México D.F.</option>
<option value="guadalajara">Guadalajara</option>
<option value="madrid">Madrid</option>
<option value="barcelona">Barcelona</option>
<option value="lima">Lima</option>
<option value="trujillo">Trujillo</option>
<option value="bogota">Bogotá</option>
<option value="cali">Cali</option>
</select>
</body>
</html>

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola dimiste.

Ahora funciona bien.

Cosas que podrías mejorar:

La función ciudadesCorrespondientes() y la función paisCorrespondiente() son demasiado extensas y se podría reducir bastante. Para empezar de la forma en que las tienes planteadas cuando se lee el código, se comprobarán todos los if de cada función, sería mejor usar else if o un switch.
En estas funciones podrías intentar también no repetir tanto código, en vez de usar un for dentro de cada if, intentar resolverlo con uno.

Pero lo importante es que tu ejercicio funciona a la perfección.

Saludos. ;D

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas noche, pedro,,

Pensaba que el intérprete del navegador cuando se encontraba con una de las condicionales y se cumplí la misma no continuaba comprobando las demás. Entonces es mejor que haya sólo una condicional if else if y no muchas if's?

Aquí dejo el código mejorado según tus indicaciones.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

window.onload = function(){
selectPais = document.getElementById('pais');
selectCiudad = document.getElementById('ciudad');
selectPais.addEventListener('change', ciudadesCorrespondientes);
selectCiudad.addEventListener('change', paisCorrespondiente);
}

function ciudadesCorrespondientes(){

for(var i=1; i<selectCiudad.length; i++){
if(selectPais.options[selectPais.selectedIndex].value=='mexico'){
if(selectCiudad.options[i].value != 'mexico df' && selectCiudad[i].value != 'guadalajara'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}else if(selectPais.options[selectPais.selectedIndex].value=='espanya'){
if(selectCiudad.options[i].value != 'madrid' && selectCiudad[i].value != 'barcelona'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}else if(selectPais.options[selectPais.selectedIndex].value=='peru'){
if(selectCiudad.options[i].value != 'lima' && selectCiudad[i].value != 'trujillo'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}else if(selectPais.options[selectPais.selectedIndex].value=='colombia'){
if(selectCiudad.options[i].value != 'bogota' && selectCiudad[i].value != 'cali'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}else{
todosLosPaises();
}
}
}

function paisCorrespondiente(){

for(var i=1; i<selectPais.length; i++){
if(selectCiudad.options[selectCiudad.selectedIndex].value == 'mexico df' || selectCiudad.options[selectCiudad.selectedIndex].value == 'guadalajara'){
selectPais.options[1].selected = true;
if(selectPais.options[i].value != 'mexico'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}else if(selectCiudad.options[selectCiudad.selectedIndex].value == 'madrid' || selectCiudad.options[selectCiudad.selectedIndex].value == 'barcelona'){
selectPais.options[2].selected = true;
if(selectPais.options[i].value != 'espanya'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}else if(selectCiudad.options[selectCiudad.selectedIndex].value == 'lima' || selectCiudad.options[selectCiudad.selectedIndex].value == 'trujillo'){
selectPais.options[3].selected = true;
if(selectPais.options[i].value != 'peru'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}else if(selectCiudad.options[selectCiudad.selectedIndex].value == 'bogota' || selectCiudad.options[selectCiudad.selectedIndex].value == 'cali'){
selectPais.options[4].selected = true;
if(selectPais.options[i].value != 'colombia'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}else{
todasLasCiudades();
}
}
}

function todosLosPaises(){
for(var i=0; i<selectPais.length; i++){
selectPais.options[i].disabled = false;
}
selectCiudad.options[0].selected = true;
todasLasCiudades();
}

function todasLasCiudades(){
for(var i=0; i<selectCiudad.length; i++){
selectCiudad.options[i].disabled = false;
}
}

</script>
</head>
<body>
<select name="pais" id="pais" style="margin-right: 20px;">
<option value="">Elegir país</option>
<option value="mexico">México</option>
<option value="espanya">España</option>
<option value="peru">Peru</option>
<option value="colombia">Colombia</option>
</select>
<select name="ciudad" id="ciudad">
<option value="">Ejegir ciudad</option>
<option value="mexico df">México D.F.</option>
<option value="guadalajara">Guadalajara</option>
<option value="madrid">Madrid</option>
<option value="barcelona">Barcelona</option>
<option value="lima">Lima</option>
<option value="trujillo">Trujillo</option>
<option value="bogota">Bogotá</option>
<option value="cali">Cali</option>
</select>
</body>
</html>

Gracias.
« Última modificación: 28 de Abril 2016, 23:52 por pedro,, »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
En este caso es mejor else if, para que en cuanto entre en uno de ellos no siga leyendo los demás.

Te dejo un código alternativo al tuyo, pero basado en el código que tu has escrito, pero con menos líneas.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

window.onload = function(){
selectPais = document.getElementById('pais');
selectCiudad = document.getElementById('ciudad');
selectPais.addEventListener('change', ciudadesCorrespondientes);
selectCiudad.addEventListener('change', paisCorrespondiente);
}

function ciudadesCorrespondientes(){
if(selectPais.options[selectPais.selectedIndex].value=='mexico'){
cambiaEstadoSelect('mexico', 'mexico df', 'guadalajara');
} else if(selectPais.options[selectPais.selectedIndex].value=='espanya'){
cambiaEstadoSelect('espanya', 'madrid', 'barcelona');
} else if(selectPais.options[selectPais.selectedIndex].value=='peru'){
cambiaEstadoSelect('peru', 'lima', 'trujillo');
} else if(selectPais.options[selectPais.selectedIndex].value=='colombia'){
cambiaEstadoSelect('colombia', 'bogota', 'cali');
} else {
todosLosPaises();
todasLasCiudades();
}
}
function cambiaEstadoSelect(pais, ciudad1, ciudad2){
for(var i=1; i<selectCiudad.length; i++){
if(i < selectPais.length){
if(selectPais.options[i].value != pais){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}
if(selectCiudad.options[i].value != ciudad1 && selectCiudad[i].value != ciudad2){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}
}

function paisCorrespondiente(){

if(selectCiudad.options[selectCiudad.selectedIndex].value == 'mexico df' || selectCiudad.options[selectCiudad.selectedIndex].value == 'guadalajara'){
selectPais.options[1].selected = true;
cambiaEstadoSelect('mexico', 'mexico df', 'guadalajara');
} else if(selectCiudad.options[selectCiudad.selectedIndex].value == 'madrid' || selectCiudad.options[selectCiudad.selectedIndex].value == 'barcelona'){
selectPais.options[2].selected = true;
cambiaEstadoSelect('espanya', 'madrid', 'barcelona');
} else if(selectCiudad.options[selectCiudad.selectedIndex].value == 'lima' || selectCiudad.options[selectCiudad.selectedIndex].value == 'trujillo'){
selectPais.options[3].selected = true;
cambiaEstadoSelect('peru', 'lima', 'trujillo');
} else if(selectCiudad.options[selectCiudad.selectedIndex].value == 'bogota' || selectCiudad.options[selectCiudad.selectedIndex].value == 'cali'){
selectPais.options[4].selected = true;
cambiaEstadoSelect('colombia', 'bogota', 'cali');
} else {
todasLasCiudades();
todosLosPaises();
}
}

function todosLosPaises(){
for(var i=0; i<selectPais.length; i++){
selectPais.options[i].disabled = false;
}
selectCiudad.options[0].selected = true;
}

function todasLasCiudades(){
for(var i=0; i<selectCiudad.length; i++){
selectCiudad.options[i].disabled = false;
}
selectPais.options[0].selected = true;
}

</script>
</head>
<body>
<select name="pais" id="pais" style="margin-right: 20px;">
<option value="">Elegir país</option>
<option value="mexico">México</option>
<option value="espanya">España</option>
<option value="peru">Peru</option>
<option value="colombia">Colombia</option>
</select>
<select name="ciudad" id="ciudad">
<option value="">Ejegir ciudad</option>
<option value="mexico df">México D.F.</option>
<option value="guadalajara">Guadalajara</option>
<option value="madrid">Madrid</option>
<option value="barcelona">Barcelona</option>
<option value="lima">Lima</option>
<option value="trujillo">Trujillo</option>
<option value="bogota">Bogotá</option>
<option value="cali">Cali</option>
</select>
</body>
</html>

Saludos. ;D

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Hola, pedro,,

Gracias por el código alternativo. Sin duda es mejor porque ha cumplido con la economía de recursos y es mejor legible (vamos, que se entiende mucho más rápido). Ves, por ejemplo, a mi no se me había ocurrido utilizar una función auxiliar para establecer la propiedad disabled de los paises, como a ti. Supongo que es falta de práctica.

He copiado el código facilitado por ti en un editor y lo he probado y funciona a la perfección(en todos los navegadores que lo he probado). Gracias.

Saludos :)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".