2012-11-29 96 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');