使用JQuery删除禁用的属性?

我必须先禁用input,然后点击一个链接来启用它们。

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

HTML:

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

jQuery的:

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

这表明我是true ,然后是false但没有改变input:

 $("#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。

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

下面的摘录(从prop()的jQuery文档中获得)更详细地解释了这些要点:

“在jQuery 1.6之前, .attr()方法在检索某些属性时有时会考虑属性值,这可能会导致不一致的行为。从jQuery 1.6开始, .prop()方法提供了显式检索属性值的方法,而.attr()检索属性。

“属性通常会影响DOM元素的dynamic状态,而不会改变序列化的HTML属性,例如input元素的value属性,input和button的disabled属性或checkbox的checked属性。用来设置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); 

请享用 :)

像这样使用,

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

我想你正试图切换禁用状态,在巫婆的情况下,你应该使用这个(从这个问题 ):

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

这是一个工作小提琴。

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

 element.removeProp('disabled') 

请注意,它是removeProp而不是removeAttr

我在这里使用jQuery 2.1.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); } } ); });