2012-08-10 24 views
11

我有一个复选框来启用或禁用select元素在jquery中禁用toggle属性

其实我使用这段简单的代码,工作正常。

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

这是最好的办法或者是有什么像.toggle()功能禁用之间切换/启用?

+0

如果不破.. .don't修复它:) – Nope 2012-08-10 14:03:56

+0

@FrançoisWahl是的,它确实工作(如我写的),但是这是尝试这个t的最好方法问?我希望jQuery提供像.toggle()函数来切换布尔属性,如禁用 – Naigel 2012-08-10 14:05:39

+1

jQuery有一个切换,但只能切换可见性:http://api.jquery.com/toggle/我不知道jQuery内置切换禁用/启用,但你可以看看他们的文档中的所有效果:http://api.jquery.com/category/effects/ – Nope 2012-08-10 14:07:49

回答

37

您应该使用.prop为残疾:

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

UPDATE:没意识到当前属性值是一个参数的功能;这个版本是更清洁:

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

UPDATE:ES2015

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

这很好,很短。使用'.prop'的好处是什么?我不知道自己,但我喜欢你的代码的简短。 – Nope 2012-08-10 14:05:33

+0

不错。我从来没有想过这样做。 – 2012-08-10 14:05:48

+0

'this.disabled'可以正常工作,而不是'.prop('disabled')' – 2012-08-10 14:07:46

7

您可以编写自己的插件,做这样的事情。

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

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

然后使用它是这样的:

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

礼貌:Toggle input disabled attribute using jQuery

1

,您可以检查使用$。是功能类似下面

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

我真的很喜欢这个,因为它很短 – Sudar 2014-09-05 15:44:25