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


394

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

到目前为止,这是我尝试过的方法,但是没有用。

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'));
});

2
我看不到你的问题。你在问什么?
nicosantangelo,2012年

那是什么问题呢?我的意思是您要面对什么问题
萨蒂亚·特娅

7
Use prop()-.prop('disabled',false)
杰伊·布兰查德

如果您的问题解决了,请勾选其他人所接受的(真实)答案,以了解其他信息……
Dhamu 2012年

问题是,在发生
重大事件

Answers:


817

prop()使用jQuery时,请始终使用该方法启用或禁用元素(有关原因,请参见下文)。

在您的情况下,它将是:

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

jsFiddle示例在这里。


为什么prop()在可以使用attr()/ removeAttr()做到这一点时使用?

基本上,prop()应该获取或设置时,可使用特性(如autoplaycheckeddisabledrequired在其他之中)。

通过使用removeAttr(),您可以完全删除disabled属性本身,而prop()只是将属性的基础布尔值设置为false。

尽管您可以使用attr()/ 来完成操作removeAttr(),但这并不意味着它应该完成(在这种情况下,可能会导致奇怪/有问题的行为)。

以下摘录(摘自proper()jQuery文档)对这些要点进行了更详细的说明:

“属性和属性之间的差异在特定情况下可能很重要。在jQuery 1.6之前,该.attr()方法有时在检索某些属性时会考虑属性值,这可能导致行为不一致。从jQuery 1.6开始,该.prop() 方法提供了一种显式检索方法属性值,同时 .attr()检索属性。”

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


3
人们还应该知道脏的checkness标志,它attrprop复选框相比完全不可用:w3.org/TR/html5/forms.html#concept-input-checked-dirty,除了内部jQuery解决方法魔术之外。
西罗Santilli郝海东冠状病六四事件法轮功

19
嗯,.prop(“ disabled”,false)在按钮上似乎对我不起作用-标记中的'disabled'属性没有值。
UpTheCreek

3
@UpTheCreek也不适合我。但是我发现“ this”子句是一个范围问题(通常)。在特定情况下.prop()是在this(指向的元素上执行的this.prop("disabled", false),但是在回调中它绑定到错误的元素,因此我必须执行常见的var that = this解决方法。尝试使用.apply()/ .call()不能很好地工作;我不知道console.log(this)在调用之前仔细检查是否已将其设置为所需的对象this.prop(...)
Kamafeather 2015年

3
我提名此答案作为转换到文档部分的候选人。清晰,完整,写得很好。
Anne Gunn

4
通过使用removeAttr(),您将完全删除禁用的属性本身-而prop()只是将属性的基础布尔值设置为false。 我不相信这是真的。在HTML中,仅存在该disabled属性将禁用该元素。例如,使用a <button disabled="false"></button> 将不会启用该按钮,则必须删除该属性。通过调用$('button').prop('disabled', false);jQuery,将为您删除该属性,正如我在此Codepen中所观察到的(检查该属性是否删除)。
Naftali

42
<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/



16

这样使用

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
 });

6
这实际上是为我工作。该prop('disabled',false)意外地不起作用。
Stefan 2014年

@Stefan在这里也是一样!你知道为什么吗?
亚历山大·苏拉菲尔

1
我知道这是一个古老的话题,但是如果有人仍然对此进行挣扎,我的问题是该元素是一个<a>,在此元素上.prop('disabled', false)不起作用。我将其更改为a <button>,现在可以使用
Oliver Nagy


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);   
        }
    }
 );
});

3

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

element.removeProp('disabled')

请注意,removeProp不是removeAttr

我在jQuery 2.1.3这里用。


12
来自jQuery文档:重要提示:.removeProp()方法不应用于将这些属性设置为false。一旦删除本机属性,就无法再次添加。有关更多信息,请参见.removeProp()。
XanatosLightfiren

2

2018,不带JQuery

我知道问题是关于JQuery的:这个答案仅供参考。

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

0

这个问题专门提到了jQuery,但是如果您想在没有jQuery的情况下完成此任务,那么在普通JavaScript中的等效项是:

elem.removeAttribute('disabled');

elem.removeAttr('disabled');为我工作
程慧媛
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.