使用JQuery删除disabled属性?

fat*_*Dev 368 javascript jquery disabled-input

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

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

HTML:

<input type="text" disabled="disabled" class="inputDisabled" value="">
Run Code Online (Sandbox Code Playgroud)

jQuery的:

$("#edit").click(function(event){
   event.preventDefault();
   $('.inputDisabled').removeAttr("disabled")
});
Run Code Online (Sandbox Code Playgroud)

这显示了我true,false但输入没有任何变化:

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

dsg*_*fin 768

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

在你的情况下,它将是:

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

这里是jsFiddle的例子.


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

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

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

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

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

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

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

  • 嗯,.prop("禁用",false)在按钮中似乎不适合我 - 在标签中保留"禁用"属性没有值. (15认同)
  • _通过使用removeAttr(),您将完全删除禁用的属性本身-而prop()只是将属性的基础布尔值设置为false。_我不相信这是真的。在HTML中,仅存在`disabled'属性将禁用该元素。例如,使&lt;button disabled =“ false”&gt; &lt;/ button&gt;不会启用该按钮,因此必须删除该属性。通过调用`$('button')。prop('disabled',false);`jQuery将为您删除该属性,正如我在[this codepen]中观察到的那样(https://codepen.io/anon/pen/aMJELv )(请查看属性删除)。 (4认同)
  • 人们还应该知道脏的检查标志,该标志完全破坏了复选框的“ attr”和“ prop”:http://www.w3.org/TR/html5/forms.html#concept-input-checked-dirty除外内部jQuery解决方法的魔力。 (3认同)
  • 我提名这个答案作为转换到文档部分的候选人.清晰,完整,写得很好. (3认同)
  • @UpTheCreek也不适合我.但我发现这是'this'子句的范围问题(像往常一样).在特定情况下`.prop()`在`this`指向的元素上执行(`this.prop("disabled",false)`,但是在回调中它绑定到了错误的元素,所以我有做常见的`var that = this` workaround.尝试使用`.apply()`/`.call()`不能正常工作;我不知道为什么.用`console.log仔细检查(这个)如果它被设置为你想要的对象,就在调用`this.prop(...)`之前 (2认同)

Mut*_*ran 41

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

$("#edit").click(function(event){
    event.preventDefault();
    $('.inputDisabled').removeAttr("disabled")
});?
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/ZwHfY/


Ume*_*til 39

删除禁用的属性使用,

 $("#elementID").removeAttr('disabled');
Run Code Online (Sandbox Code Playgroud)

并添加禁用的属性使用,

$("#elementID").prop("disabled", true);
Run Code Online (Sandbox Code Playgroud)

请享用 :)

  • 或者只是vanilla js中的element.removeAttribute('disabled') (2认同)

Dha*_*amu 16

像这样使用,

HTML:

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

<div id="edit">edit</div>
Run Code Online (Sandbox Code Playgroud)

JS:

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

  • 这个实际上对我有用.支柱('禁用',假)令人惊讶地无效. (5认同)

nic*_*elo 9

我想你正试图切换禁用状态,在这种情况下你应该使用它(来自这个问题):

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

这是一个工作小提琴.


小智 8

用于删除禁用的属性

 $('#inputDisabled').removeAttr('Disabled');
Run Code Online (Sandbox Code Playgroud)

用于添加禁用的属性

 $('#inputDisabled').attr('disabled', 'disabled' );
Run Code Online (Sandbox Code Playgroud)


rap*_*2-h 5

2018 年,没有 JQuery

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

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