如何使用jQuery删除“disabled”属性?

时间:2012-11-29 13:06:39

标签: javascript jquery disabled-input

我必须先禁用输入,然后点击链接启用它们。

这是我到目前为止所尝试的,但它不起作用。

HTML:

<input type="text" disabled="disabled" class="inputDisabled" value="">

jQuery的:

$("#edit").click(function(event){
   event.preventDefault();
   $('.inputDisabled').removeAttr("disabled")
});


这会向我显示true然后false,但输入没有任何变化:

$("#edit").click(function(event){
   alert('');
   event.preventDefault();
   alert($('.inputDisabled').attr('disabled'));
   $('.inputDisabled').removeAttr("disabled");
   alert($('.inputDisabled').attr('disabled'));
});

11 个答案:

答案 0 :(得分:719)

始终使用 prop() 方法在使用jQuery时启用或禁用元素(请参阅下面的原因)。

在你的情况下,它将是:

$("#edit").click(function(event){
   event.preventDefault();
   $('.inputDisabled').prop("disabled", false); // Element(s) are now enabled.
});

jsFiddle example here.


  

为什么在使用prop() / attr()执行此操作时使用removeAttr()

基本上,在获取或设置属性时应使用prop()(例如autoplaycheckeddisabled和{{1} } 在其他人中)。

通过使用required,您将完全删除removeAttr()属性本身 - 而disabled仅将属性的基础布尔值设置为false。

虽然您想要 使用prop() / attr()完成 ,但这并不意味着应该完成(并且可能导致奇怪/有问题的行为,如本例所示。)

以下摘录(摘自jQuery documentation for prop())更详细地解释了这些要点:

  

“属性和属性之间的区别非常重要   具体情况。在jQuery 1.6之前,有时会使用removeAttr()方法   在检索某些属性时考虑了属性值,   这可能会导致行为不一致。从jQuery 1.6开始,.attr()   方法提供了一种显式检索属性值的方法   .prop()检索属性。“

     

“属性通常会影响DOM元素的动态状态   更改序列化的HTML属性。示例包括.attr()   输入元素的属性,输入的value属性和   按钮,或复选框的disabled属性。 checked方法   应该用来设置.prop()disabled而不是checked   方法。 .attr()方法应该用于获取和设置   .val()“。

答案 1 :(得分:37)

<input type="text" disabled="disabled" class="inputDisabled" value="">
​<button id="edit">Edit</button>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

$("#edit").click(function(event){
    event.preventDefault();
    $('.inputDisabled').removeAttr("disabled")
});​

http://jsfiddle.net/ZwHfY/

答案 2 :(得分:34)

删除已停用的属性,

 $("#elementID").removeAttr('disabled');

并添加禁用属性使用

$("#elementID").prop("disabled", true);

享受:)

答案 3 :(得分:15)

像这样使用,

<强> HTML:

<input type="text" disabled="disabled" class="inputDisabled" value="">

<div id="edit">edit</div>

<强> JS:

 $('#edit').click(function(){ // click to
            $('.inputDisabled').attr('disabled',false); // removing disabled in this class
 });

答案 4 :(得分:9)

我认为你正试图切换禁用状态,如果你应该使用它(来自this question):

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

Here is a working fiddle.

答案 5 :(得分:4)

这是唯一对我有用的代码:

element.removeProp('disabled')

请注意,它是removeProp而不是removeAttr

我在这里使用jQuery 2.1.3

答案 6 :(得分:3)

认为这可以轻松设置

$(function(){
$("input[name^=radio_share]").click
(
    function()
    {
        if($(this).attr("id")=="radio_share_dependent")
        {
            $(".share_dependent_block input, .share_dependent_block select").prop("disabled",false);   
        }
        else
        {
            $(".share_dependent_block input, .share_dependent_block select").prop("disabled",true);   
        }
    }
 );
});

答案 7 :(得分:2)

用于删除禁用的属性

 $('#inputDisabled').removeAttr('Disabled');

用于添加禁用的属性

 $('#inputDisabled').attr('disabled', 'disabled' );

答案 8 :(得分:1)

2018,没有JQuery

我知道这个问题是关于JQuery的:这个答案只是FYI。

document.getElementById('edit').addEventListener(event => {
    event.preventDefault();
    [...document.querySelectorAll('.inputDisabled')].map(e => e.disabled = false);
}); 

答案 9 :(得分:0)

尝试特殊选择器:

不工作:$('#ID_Unit').removeAttr("disabled");
作品:$('select[id=ID_Unit]:disabled').removeAttr("disabled");

所有“选择”控件$('select:disabled').removeAttr("disabled");

“select”是控件类型,如“type”等

答案 10 :(得分:-1)

这个问题特别提到了jQuery,但是如果你想在没有jQuery的情况下完成这个,那么vanilla JavaScript中的等价物就是:

elem.removeAttribute('disabled');