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

2022-08-29 23:12:34

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

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

网页:

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

jQuery:

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


这显示了我,然后输入没有任何变化:truefalse

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

答案 1

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

在您的情况下,它将是:

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

js在这里的例子。


当你可以使用/来做这件事时,为什么要使用?prop()attr()removeAttr()

基本上,在获取或设置属性(如 、 、 等)时应使用。prop()autoplaycheckeddisabledrequired

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

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

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

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

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


答案 2

删除已禁用的属性使用,

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

并添加禁用的属性使用,

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

享受:)