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

这是我迄今为止尝试过的方法,但行不通。

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

当前回答

使用jQuery时,总是使用prop()方法来启用或禁用元素(原因见下文)。

在你的情况下,它将是:

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

jsFiddle的例子。


为什么使用prop()当你可以使用attr()/removeAttr()来做到这一点?

基本上,prop()应该在获取或设置属性(如自动播放、选中、禁用和必需等)时使用。

虽然你想做的事情在技术上可以使用attr()/removeAttr()来完成,但这并不意味着应该这样做——而且可能会导致奇怪/有问题的行为,就像在这种情况下。

"The difference between attributes and properties can be important in specific situations. Before jQuery 1.6, the .attr() method sometimes took property values into account when retrieving some attributes, which could cause inconsistent behavior. As of jQuery 1.6, the .prop() method provides a way to explicitly retrieve property values, while .attr() retrieves attributes." "Properties generally affect the dynamic state of a DOM element without changing the serialized HTML attribute. Examples include the value property of input elements, the disabled property of inputs and buttons, or the checked property of a checkbox. The .prop() method should be used to set disabled and checked instead of the .attr() method. The .val() method should be used for getting and setting value." - jQuery documentation for prop()

jquery 3.0之前(2016年之前)

你应该在removeAttr()上使用prop的原因是removeAttr()完全删除了禁用的属性本身——因为这个方法只会简单地将相应的属性名设置为false:

在jQuery 3.0之前,在布尔属性上使用.removeAttr() 如勾选、选中或只读也会设置相应的 指定属性为false。这种行为是古代所需要的 版本的Internet Explorer,但不适合现代浏览器 因为属性表示初始值和属性 表示当前(动态)值。jQuery 3.0突破性变化

而prop()只是将属性的底层布尔值设置为false。

其他回答

这是唯一适用于我的代码:

element.removeProp('disabled')

注意,它是removeProp而不是removeAttr。

这里我使用的是jQuery 2.1.3。

我认为你正在尝试切换禁用状态,在这种情况下,你应该使用这个(从这个问题):

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

这是一把能用的小提琴。

尝试特殊的选择器:

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

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

“select”是控制类型,就像“type”一样。

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

elem.removeAttribute('disabled');

使用jQuery时,总是使用prop()方法来启用或禁用元素(原因见下文)。

在你的情况下,它将是:

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

jsFiddle的例子。


为什么使用prop()当你可以使用attr()/removeAttr()来做到这一点?

基本上,prop()应该在获取或设置属性(如自动播放、选中、禁用和必需等)时使用。

虽然你想做的事情在技术上可以使用attr()/removeAttr()来完成,但这并不意味着应该这样做——而且可能会导致奇怪/有问题的行为,就像在这种情况下。

"The difference between attributes and properties can be important in specific situations. Before jQuery 1.6, the .attr() method sometimes took property values into account when retrieving some attributes, which could cause inconsistent behavior. As of jQuery 1.6, the .prop() method provides a way to explicitly retrieve property values, while .attr() retrieves attributes." "Properties generally affect the dynamic state of a DOM element without changing the serialized HTML attribute. Examples include the value property of input elements, the disabled property of inputs and buttons, or the checked property of a checkbox. The .prop() method should be used to set disabled and checked instead of the .attr() method. The .val() method should be used for getting and setting value." - jQuery documentation for prop()

jquery 3.0之前(2016年之前)

你应该在removeAttr()上使用prop的原因是removeAttr()完全删除了禁用的属性本身——因为这个方法只会简单地将相应的属性名设置为false:

在jQuery 3.0之前,在布尔属性上使用.removeAttr() 如勾选、选中或只读也会设置相应的 指定属性为false。这种行为是古代所需要的 版本的Internet Explorer,但不适合现代浏览器 因为属性表示初始值和属性 表示当前(动态)值。jQuery 3.0突破性变化

而prop()只是将属性的底层布尔值设置为false。