Ver Mensaje Individual
  #4 (permalink)  
Antiguo 24/08/2014, 10:25
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: Desactivar inputs con radiobuttons

Una solución:

Código HTML:
Ver original
  1. Activar <input type = "radio" name = "estado" value = "1" checked />
  2. Desactivar <input type = "radio" name = "estado" value = "2" />
  3. <input type = "text" name = "caja" />

Código Javascript:
Ver original
  1. [].forEach.call(document.querySelectorAll("[name=estado]"), function(radio){
  2.     radio.addEventListener("click", function(){
  3.         if (this.checked){
  4.             if (this.value == 1){
  5.                 document.querySelector("[name=caja]").disabled = false;
  6.             }
  7.             else{
  8.                 document.querySelector("[name=caja]").disabled = true;
  9.             }      
  10.         }
  11.     });
  12. });

Lo que hago es simple. Primero, recorro al conjunto de radiobuttons y a cada uno le asigno una función por cada vez que se les de un clic. En la función verifico si el radiobutton está marcado; de ser así, evalúo su valor, si es igual a 1, habilito a la caja, caso contrario, la deshabilito.

Lo anterior funcionará en la mayoría de navegadores, excepto en versiones anteriores a IE9. Una alternativa de solución para navegadores antiguos:

Código Javascript:
Ver original
  1. var inputs = document.getElementsByTagName("input"),
  2.     total = inputs.length,
  3.     i, caja;
  4.  
  5. for (i = 0; i < total; i++){
  6.     if (inputs[i].name == "caja"){
  7.         caja = inputs[i];
  8.         break;
  9.     }
  10. }
  11.  
  12. for (i = 0; i < total; i++){
  13.     (function(radio){
  14.         if (radio.name == "estado"){
  15.             radio.onclick = function(){
  16.                 if (radio.checked){
  17.                     if (radio.value == 1){
  18.                         caja.disabled = false;
  19.                     }
  20.                     else{
  21.                         caja.disabled = true;
  22.                     }
  23.                 }
  24.             };
  25.         }
  26.     })(inputs[i]);
  27. }

Como en las primeras versiones de IE no se pueden utilizar métodos de selección como querySelector, querySelectorAll o getElementsByClassName y dado a que tanto los radiobuttons como la caja de texto son elementos <input>, los tomo a todos y usando un bucle, busco a la caja de texto y la asigno a una variable, de este modo, podré aplicarle la habilitación/deshabilitación si necesidad de volver a buscarla. En el segundo bucle, realizo un closure por cada radiobutton para evitar conflictos con los demás radiobuttons. Es una manera más segura de aplicar un conjunto de instrucciones a cada elemento dentro de un bucle. En la función anónima, verifico el nombre del elemento, si es igual a 'estado', quiere decir que es uno de los radiobutton, por lo que procedo a asignarle una función para cuando le demos un clic. Al darle clic, verificamos si está marcado; de estarlo, verificamos su valor, si es igual a 1, habilitamos a la caja de texto, caso contrario, la deshabilitamos.



Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand