2012-08-10 14 views
11

Tengo una casilla de verificación que habilita o deshabilita un elemento de selecciónAlternar atributo deshabilitado en jquery

En realidad, uso esta simple pieza de código que funciona bien.

$("#filtri").change(function(){ 
    if ($("#menuContinenti").attr("disabled")) { 
     $("#menuContinenti").removeAttr("disabled"); 
    } else { 
     $("#menuContinenti").attr("disabled", "disabled"); 
    } 
}); 

¿Es esta la mejor manera o hay algo así como una función para cambiar entre .toggle() discapacitados/habilitado?

+0

Si no está roto .. .no lo arregles :) – Nope

+0

@ FrançoisWahl sí funciona (como escribí), pero ¿es esta la mejor manera de intentar esto? ¿pedir? Espero que jquery ofrezca algo así como una función .toggle() para alternar entre atributos booleanos como disabled – Naigel

+1

jQuery tiene una alternancia pero solo para alternar la visibilidad: http://api.jquery.com/toggle/ No sé de un jQuery incorporado alternar para deshabilitar/habilitar, pero puede echar un vistazo a todos los efectos en sus documentos: http://api.jquery.com/category/effects/ – Nope

Respuesta

37

Debe utilizar .prop para discapacitados:

$("#menuContinenti").prop('disabled', function() { 
    return ! $(this).prop('disabled'); 
}); 

ACTUALIZACIÓN: no se dio cuenta el valor actual de la propiedad es un argumento para la función; esta versión es aún más limpio:

$("#menuContinenti").prop('disabled', function (_, val) { return ! val; }); 

ACTUALIZACIÓN: ES2015

$("#menuContinenti").prop("disabled", (_, val) => !val); 
+0

Es bueno y corto. ¿Cuál es el beneficio de usar '.prop' aunque? No me conozco pero me gusta la brevedad de tu código. – Nope

+0

Agradable. Nunca pensé que lo hiciera de esa manera. –

+0

'this.disabled' funciona bien en lugar de' .prop ('disabled') ' –

7

Usted puede escribir su propio plugin que hace algo como esto.

Agregue esto después de jQuery, preferiblemente en un archivo de script.

(function($) { 
    $.fn.toggleDisabled = function(){ 
     return this.each(function(){ 
      this.disabled = !this.disabled; 
     }); 
    }; 
})(jQuery); 

Entonces utilizar de esta manera:

$('#my-select').toggleDisabled(); 

Cortesía: Toggle input disabled attribute using jQuery

1

se puede comprobar usando la función $ .is, como a continuación

$("#filtri").change(function(){ 
    $("#menuContinenti").attr("disabled", ! $(this).is(':checked'));  
}); 
+1

Me gusta mucho, ya que es muy corto – Sudar

Cuestiones relacionadas