removeAttr()不删除IE中的“disabled”属性

时间:2012-04-20 07:44:44

标签: jquery internet-explorer

var disableSelection = function(){
    $("#elementId").attr("disabled","disabled");    
};

var enableSelection = function(){
    $("#elementId").removeAttr("disabled");
};

我有以下要求:

  1. 禁用SELECT元素以限制用户选择选项
  2. 禁用SELECT元素已选择一些OPTION元素
  3. on提交事件启用禁用SELECT元素以保存选定值
  4. 添加属性“已禁用”适用于IE。 然而,当我尝试使用jQuery revomeAttr()方法删除属性时,而不是删除属性:

    1. 方法将“disabled”属性添加到先前启用的SELECT元素
    2. 方法不会删除“已停用”属性

3 个答案:

答案 0 :(得分:56)

使用.prop代替.attr来影响元素的禁用状态:

var disableSelection = function(){
    $("#elementId").prop("disabled", true);    
};

var enableSelection = function(){
    $("#elementId").prop("disabled", false);
};

有关详细信息,请参阅.prop() vs .attr()

答案 1 :(得分:4)

您可以改用removeProp('disabled')。它虽然removeAttr('disabled')没有,但对我有用。

答案 2 :(得分:1)

Jquery Docs说,关于.removeProp():

  

注意:请勿使用此方法删除本机属性,例如checked,> disabled或selected。这将完全删除该属性,并且一旦>删除,就不能再次添加到元素。使用.prop()将这些属性>设置为false。

     

附加说明:

     

在版本9之前的Internet Explorer中,使用.prop()将DOM元素>属性设置为除简单原始值(数字,字符串或>布尔值)以外的任何内容都可能导致内存泄漏(如果属性为在从文档中删除DOM元素之前,不会删除(使用> .removeProp())。要安全地>在没有内存泄漏的DOM对象上设置值,请使用.data()。