使用JQuery删除禁用的属性?

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

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

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()来做到这一点?

基本上,在获取或设置属性(如autoplaycheckeddisabled和其他required prop()时应使用prop() )。

通过使用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 。“


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


删除禁用的属性使用,

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

并添加禁用的属性使用,

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

请享用 :)

链接地址: http://www.djcxy.com/p/3935.html

上一篇: Remove disabled attribute using JQuery?

下一篇: Include jQuery in the JavaScript Console