Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Problema con deshabilitar un select!

Estas en el tema de Problema con deshabilitar un select! en el foro de Javascript en Foros del Web. Buen día. Supongamos que tenemos 2 select's. La idea es que el 2do se habilite sólo cuando se elija el índice 1, 2 ó 3 ...
  #1 (permalink)  
Antiguo 07/03/2014, 16:41
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Pregunta Problema con deshabilitar un select!

Buen día.

Supongamos que tenemos 2 select's. La idea es que el 2do se habilite sólo cuando se elija el índice 1, 2 ó 3 del 1er select. Pero si se elige el índice 0, entonces que se deshabilite.

Pueden echar una mirada al código por aquí. El cual, faltaba más, no deshabilita al 2do select cuando se elige el índice 0.



Saludos cordiales!

  #2 (permalink)  
Antiguo 07/03/2014, 16:57
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Problema con deshabilitar un select!

¿por qué complicarlo tanto?

Código Javascript:
Ver original
  1. function actualizar(){
  2.       var indices = document.formulario.select1.selectedIndex;
  3.       if (indices >0)
  4.           document.formulario.select2.disabled = false;
  5.       else
  6.           document.formulario.select2.disabled = true;
  7.   }
  #3 (permalink)  
Antiguo 07/03/2014, 21:12
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: Problema con deshabilitar un select!

Cita:
Iniciado por ocp001a Ver Mensaje
¿por qué complicarlo tanto?...
Buena noche, maestro ocp001a.

Tu código funciona perfectamente!

Pero la cosa es que el código que puse es, digamos, la forma esencial de la función que estaba entrenando. Y los condicionales, así como las funciones, pues definitivamente los necesito así.

Bueno, después de leerte se me ocurrió utilizar el switch, igual y servía. Si no, pues te pediría ayuda dándote más información. Hice la prueba con el switch y funcionó!

Te pongo el código completo (ya con el switch), como lo estaba trabajando, es el clásico ejemplo de listas dependientes.

Si pudieras, me sería valioso saber por qué no funciona el código que inicialmente puse. Porque, está bien construido, ¿no?


Saludos!

Última edición por berkeleyPunk; 07/03/2014 a las 21:23
  #4 (permalink)  
Antiguo 08/03/2014, 01:26
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Problema con deshabilitar un select!

Hola:

Teniendo valores (en los value) iguales a sus funciones, podrías simplificar mucho...

onchange="window[this.value]()"

Eso si, deben existir esos métodos definidos... y en vez de null, una función cualquiera que deshabilite el select...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 08/03/2014, 09:13
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: Problema con deshabilitar un select!

Cita:
Iniciado por caricatos Ver Mensaje
...Teniendo valores (en los value) iguales a sus funciones, podrías simplificar mucho...
Excelente maestro caricatos. Hice cambios según tus recomendaciones, y todo funciona bien. La cosa quedó así.

Sería bastante nutritivo si pudieras explicar cómo se lee esto:onchange="window[this.value]()"

Creo entender la parte de [this.value](), que sin duda dice: cuando ocurra el evento onchange en el select, se va a ejecutar la función que tenga como nombre lo mismo que el value de este (this) elemento cliqueado.

Pero no entiendo bien qué hace ahí el window. Por lo que logro ver, bueno, pues se hace referencia al objeto window, o sea a la ventana, como si fuera un array, y por eso se ponen inmediatamente los corchetes haciendo referencia a un índice, el índice sería el option seleccionado...







Saludos!

Última edición por berkeleyPunk; 08/03/2014 a las 10:00
  #6 (permalink)  
Antiguo 08/03/2014, 10:50
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 8 meses
Puntos: 578
Respuesta: Problema con deshabilitar un select!

Empezar diciendo que el keyword this se puede evitar cuando se llama de forma lineal (desde atributos en html) porque siempre se toma de referencia a sí mismo, luego onchange="window[this.value]" es lo mismo que onchange="window[value]".

Ahí se utiliza window porque que todas las variables y funciones declaradas en el scope global son propiedades de éste objeto. Lo que hace el array literal es acceder a sus propiedades (en realidad un array son todo propiedades, incluso los numéricos que solo pueden ser accedidos de esta forma). La diferencia entre el punto y el array literal es que los nombres de las propiedades se pasan de forma distinta, por ejemplo:

Código:
// Forma normal
window.alert();
o
alert();

// Mediante array "asociativo"
window["alert"]();
En este caso como lo que obtenermos de la propiedad value del select es texto o string, necesitamos utilizar la segunda forma. Digamos que son dos alternativas. Te pongo otro ejemplo:

Código:
var arr = [];
arr["propiedad"] = "algo";

console.log(arr.propiedad); // "algo"
console.log(arr["propiedad"]); // "algo"

// Atento a este, también pueden pasarse variables con texto, números etc. mientras que en el normal no.

var variable = "propiedad";
console.log(arr[variable]); // "algo"
Espero haberme explicado más o menos.

Saludos

Última edición por PHPeros; 08/03/2014 a las 12:35
  #7 (permalink)  
Antiguo 08/03/2014, 22:18
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: Problema con deshabilitar un select!

Cita:
Iniciado por PHPeros Ver Mensaje
...Ahí se utiliza window porque que todas las variables y funciones declaradas en el scope global son propiedades de éste objeto...
No, caray, pues bien, eh!

Entonces, para hacer una analogía, del mismo modo como todos los elementos (divs, spans, etc) están contenidos en el body, de modo que cuando se da clic a uno se da clic también al body, del mismo modo, todas las variables y funciones presentes en el documento son parte del objeto window. Por esta razón se puede acceder a dichas funciones y variables como índices del array window: window[this.value](), que sería, digamos, lo mismo que escribir algo como window.miFuncion()

Saludos cordiales!


Etiquetas: Ninguno
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 13:46.