jquery中的toggle disabled属性

Nai*_*gel 15 jquery

我有一个启用或禁用select元素的复选框

实际上我使用这段简单的代码就行了.

$("#filtri").change(function(){
    if ($("#menuContinenti").attr("disabled")) {
        $("#menuContinenti").removeAttr("disabled");
    } else {
        $("#menuContinenti").attr("disabled", "disabled");
    }
});
Run Code Online (Sandbox Code Playgroud)

这是最好的方式还是有类似.toggle()功能在禁用/启用之间切换?

Exp*_*lls 40

您应该使用.prop禁用:

$("#menuContinenti").prop('disabled', function () {
   return ! $(this).prop('disabled');
});
Run Code Online (Sandbox Code Playgroud)

更新:没有意识到当前属性值是函数的参数; 这个版本更干净:

$("#menuContinenti").prop('disabled', function (_, val) { return ! val; });
Run Code Online (Sandbox Code Playgroud)

更新:ES2015

$("#menuContinenti").prop("disabled", (_, val) => !val);
Run Code Online (Sandbox Code Playgroud)

  • @FrançoisWahl`prop`是DOM对象与`attr`的属性,它是序列化的HTML.我担心我不知道太多细节,只是使用`.attr`进行禁用/检查可能不会像你期望的那样工作.jQuery的API推荐使用`.prop`专门.引用:".prop()方法应该用于设置disabled和checked而不是.attr()方法." (2认同)

Moi*_*man 8

您可以编写自己的插件来执行类似的操作.

在jQuery之后添加这个,最好是在脚本文件中.

(function($) {
    $.fn.toggleDisabled = function(){
        return this.each(function(){
            this.disabled = !this.disabled;
        });
    };
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

$('#my-select').toggleDisabled();
Run Code Online (Sandbox Code Playgroud)

礼貌:使用jQuery切换输入禁用属性