2012-11-29 48 views
277

我必须先禁用输入,然后点击链接才能启用它们。使用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')); 
}); 
+2

我不明白你的问题。你在问什么? – NicoSantangelo

+0

那么问题是什么?我的意思是你面临什么问题 –

+7

使用道具() - .prop('disabled',false) –

回答

572

总是使用prop()使用jQuery时启用或禁用元素的方法(请参阅下面的原因)。

在你的情况,这将是:

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

jsFiddle example here.


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

基本上,prop()应该获取或设置属性(如autoplaycheckeddisabledrequired除其他)时使用。

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

当你想要做什么可以使用attr()/removeAttr()来完成,但这并不意味着它应该完成(并能引起奇怪的/有问题的行为,在这种情况下)。 。

以下提取物(从jQuery documentation for prop()截取)中更详细地解释这些点:

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

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

+1

人们应该也知道紧邻脏检查标志,除了内部jQuery解决方法魔术之外,它完全打破了'attr'和'prop'的复选框:http://www.w3.org/TR/html5/forms.html#concept-input-checked-dirty。 –

+1

只需稍加补充,如果您想禁用复选框以及取消选中它。我们需要先取消选中,然后禁用像这样的jQuery('#no_tax_payer')。prop(“checked”,false).prop(“disabled”,true);希望这可以帮助别人! – Haijerome

+11

嗯,.prop(“禁用”,假)似乎不适用于我的按钮 - 在标签中留下'禁用'属性没有值。 – UpTheCreek

14

使用这样,

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

http://jsfiddle.net/gvrPD/....为你代码 – Dhamu

+5

这一个实际上是为我工作的道具('残疾人',假)令人惊讶的没有工作 – Stefan

+0

@Stefan同样的事情在这里!你知道为什么吗? –

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

2

想到这里,你可以轻松设置

$(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); 
     } 
    } 
); 
}); 
20

删除禁用的属性利用,

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

,并添加禁用的属性利用,

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

享受:)

+1

或者只是在香草js中使用element.removeAttribute('disabled') –

4

这只是为我工作的代码:

element.removeProp('disabled') 

请注意,这是removeProp而不是removeAttr

我在这里使用jQuery 2.1.3

+6

来自jQuery文档: 重要说明:不应使用.removeProp()方法将这些属性设置为false。一旦原生财产被删除,它不能再被添加。有关更多信息,请参阅.removeProp()。 – XanatosLightfiren

0

这个问题专门提到jQuery的,但如果你正在寻找实现这一目标没有jQuery的,在香草的​​JavaScript可等效为:

elem.removeAttribute('disabled');