Foros del Web » Programando para Internet » Javascript »

Desactivar inputs con radiobuttons

Estas en el tema de Desactivar inputs con radiobuttons en el foro de Javascript en Foros del Web. Hola a todos, estoy haciendo un formulario que empieza con dos opciones (radio buttons) y quiero que si eligen el segundo radio button se desactive ...
  #1 (permalink)  
Antiguo 22/08/2014, 12:00
Avatar de ruizinho  
Fecha de Ingreso: noviembre-2012
Ubicación: Granada
Mensajes: 68
Antigüedad: 11 años, 5 meses
Puntos: 2
Pregunta Desactivar inputs con radiobuttons

Hola a todos, estoy haciendo un formulario que empieza con dos opciones (radio buttons) y quiero que si eligen el segundo radio button se desactive un input del formulario.

La verdad es que ahora mismo no sé como meterle mano, así que si me guiáis un poco os lo agradecería.

Un saludo!!
__________________
Instalaciones Técnicas Ruiz
  #2 (permalink)  
Antiguo 22/08/2014, 14:11
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 8 meses
Puntos: 578
Respuesta: Desactivar inputs con radiobuttons

Sería más sencillo de hacer con un select



  #3 (permalink)  
Antiguo 24/08/2014, 09:26
Avatar de ruizinho  
Fecha de Ingreso: noviembre-2012
Ubicación: Granada
Mensajes: 68
Antigüedad: 11 años, 5 meses
Puntos: 2
Respuesta: Desactivar inputs con radiobuttons

Hola, gracias por responder, la verdad es que con el select funciona bien (así que me guardo el código xD) pero por cuestiones de estética para el formulario me haría falta que fuera con radio-buttons,¿me podrías indicar como sería con radio-buttons?

Gracias de nuevo!

Un Saludo!
__________________
Instalaciones Técnicas Ruiz
  #4 (permalink)  
Antiguo 24/08/2014, 10:25
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 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
  #5 (permalink)  
Antiguo 24/08/2014, 10:40
Avatar de ruizinho  
Fecha de Ingreso: noviembre-2012
Ubicación: Granada
Mensajes: 68
Antigüedad: 11 años, 5 meses
Puntos: 2
Respuesta: Desactivar inputs con radiobuttons

Gracias Alexis, perfecto!! y encima me pones el código para la compatibilidad con IE!!

Muchas gracias a los dos por ayudarme!!

Un abrazo!
__________________
Instalaciones Técnicas Ruiz
  #6 (permalink)  
Antiguo 24/08/2014, 11:27
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Desactivar inputs con radiobuttons

Ahora que estoy un poco más lúcido y lo analizo mejor, no es necesaria la condición para verificar si el radiobutton está marcado pues, al clickear un radiobutton, siempre se marcará. Tuve un lapsus generado por el sueño y lo confundí con los checkbox en donde sí es necesaria esa verificación.

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
  #7 (permalink)  
Antiguo 24/08/2014, 15:08
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Desactivar inputs con radiobuttons

aún buscando compatibilidad con versiones antiguas de ie, es más sencillo que lo expuesto
Cita:
function EventoIE8(elemento, nomevento, fnc) {

if (elemento.addEventListener) {

elemento.addEventListener(nomevento, fnc, false);

} else if (elemento.attachEvent) {

var foo = function() {fnc.call(elemento, window.event);}
elemento.attachEvent('on' + nomevento, foo);
elemento[fnc.toString() + nomevento] = foo;
}
}




window.onload = function() {


for (var i = 0, radio = document.getElementsByName("estado"); i < radio.length; i++) {

EventoIE8(radio[i], 'click', function(){

document.querySelector("[name=caja]").disabled = this.value;

});
}


}




Activar <input type = "radio" name = "estado" value = "" checked />
Desactivar <input type = "radio" name = "estado" value = "true" />
<input type = "text" name = "caja" />
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: input, radio
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 11:09.