Toggle input disabled attribute using jQuery Toggle input disabled attribute using jQuery jquery jquery

Toggle input disabled attribute using jQuery


$('#el').prop('disabled', function(i, v) { return !v; });

The .prop() method accepts two arguments:

  • Property name (disabled, checked, selected) anything that is either true or false
  • Property value, can be:
    • (empty) - returns the current value.
    • boolean (true/false) - sets the property value.
    • function - Is executed for each found element, the returned value is used to set the property. There are two arguments passed; the first argument is the index (0, 1, 2, increases for each found element). The second argument is the current value of the element (true/false).

So in this case, I used a function that supplied me the index (i) and the current value (v), then I returned the opposite of the current value, so the property state is reversed.


I guess to get full browser comparability disabled should set by the value disabled or get removed!
Here is a small plugin that I've just made:

(function($) {    $.fn.toggleDisabled = function() {        return this.each(function() {            var $this = $(this);            if ($this.attr('disabled')) $this.removeAttr('disabled');            else $this.attr('disabled', 'disabled');        });    };})(jQuery);

Example link.

EDIT: updated the example link/code to maintaining chainability!
EDIT 2:
Based on @lonesomeday comment, here's an enhanced version:

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


    $('#checkbox').click(function(){        $('#submit').attr('disabled', !$(this).attr('checked'));    });