jQueryを使用して「無効」属性を削除するにはどうすればよいですか?


394

最初に入力を無効にし、次にリンクをクリックして有効にする必要があります。

これは私がこれまでに試したものですが、機能しません。

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 2012年

それで質問は何ですか?私はあなたが直面しているどのような問題を意味する
サティヤテジャ

7
prop()を使用します-.prop( 'disabled'、false)
Jay Blanchard

問題が解決した場合は、承認された(実際の)回答に
チェックマーク

問題は、
クリック

回答:


817

常に使用するprop()jQueryを使用するときメソッドを使用して要素を有効または無効にします(理由については以下を参照)。

あなたの場合、それは:

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

ここにjsFiddleの例があります。


これを行うprop()ためにattr()/ removeAttr()を使用できるのに、なぜ使用するのですか?

基本的に、prop()取得または設定する際に使用されるべき性質を(例えばautoplaycheckeddisabledおよびrequiredとりわけ)。

を使用removeAttr()すると、disabled属性自体が完全に削除されますがprop()、プロパティの基礎となるブール値がfalseに設定されるだけです。

あなたがしたいことは/ を使って行うことできますが、それはそれが行われるべきであることを意味しません(そしてこの場合のように奇妙な/問題のある振る舞いを引き起こす可能性があります)。attr()removeAttr()

次の抜粋(prop()のjQueryドキュメントから抜粋)は、これらのポイントをより詳細に説明しています。

「属性とプロパティの違いは、特定の状況で重要になることがあります。jQueryの1.6、前に.attr()いくつかの属性を取得するときの方法は時々一貫性のない動作を引き起こす可能性があり、考慮にプロパティ値を取った。jQueryの1.6の時点で、.prop() 方法を明示的に取得するための方法を提供しますプロパティ値、.attr()属性を 取得します。」

「プロパティは、一般的にシリアライズHTML属性を変更することなく、DOM要素の動的状態に影響を与える。例としては、value 入力要素のプロパティ、disabled入力およびボタンの性質、又はcheckedチェックボックスのプロパティ。.prop()この方法は、設定するために使用されるべきであるdisabledcheckedの代わりに.attr() 方法。.val()この方法は、取得および設定するために使用すべきです value。」


3
人々はまた、完全にブレイク汚れのcheckednessフラグ、当接知っておくべきattrprop:チェックボックスのためのw3.org/TR/html5/forms.html#concept-input-checked-dirty内部のjQueryを除いては、魔法を回避します。
Ciro Santilli郝海东冠状病六四事件法轮功

19
うーん、.prop( "disabled"、false)はボタンでは機能しないようです。タグの 'disabled'属性を値なしのままにします。
UpTheCreek、2015年

3
@UpTheCreekも私のために働いていませんでした。しかし、(通常のように) 'this'句のスコープの問題であることがわかりました。特定のケースでは.prop()要素上で実行されたことで指されるthisthis.prop("disabled", false)が、私は共通しなければならなかったので、それは、間違った要素に結合されたコールバックの中にいるvar that = this回避策を一緒にプレイしようとしています。.apply()/は.call()うまく働いていなかった。私は知りません理由:console.log(this)呼び出す前に、目的のオブジェクトに設定されているかどうかをダブルチェックしますthis.prop(...)
Kamafeather

3
この回答をドキュメントセクションへの変換候補として推薦します。明確、完全、よく書かれている。
アンガン

4
removeAttr()を使用すると、無効化された属性自体が完全に削除されます。prop()は、プロパティの基になるブール値をfalseに設定するだけです。 これが本当だとは思わない。HTMLでは、disabledプロパティが存在するだけで要素が無効になります。たとえば<button disabled="false"></button> 、ボタンを有効にしない場合、プロパティは削除する必要があります。このコードペンで$('button').prop('disabled', false);確認したように、jQueryを呼び出すとプロパティが削除されます(プロパティの削除を確認してください)。
Naftali

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


42

無効化された属性の使用を削除するには、

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

無効な属性の使用を追加するには、

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

楽しい :)


4
または単にバニラjsのelement.removeAttribute( 'disabled')
Dragos Rusu

16

このように使用し、

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

6
これは実際に私のために働いています。prop( 'disabled'、false)は驚くほど機能しませんでした。
ステファン

@Stefan同じことをここに!理由はわかりましたか?
Alexander Suraphel 2017

1
私はこれが古いスレッドであることを知っていますが、誰かがまだこれに苦労している場合、私の問題は、要素がであり<a>、その上で.prop('disabled', false)は機能しないことでした。私はそれをaに変更し、<button>現在機能しています
Oliver Nagy


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

3

これは私のために働いた唯一のコードでした:

element.removeProp('disabled')

それはだということに注意removePropしていませんremoveAttr

jQuery 2.1.3ここで使っています。


12
jQueryドキュメントから:重要:これらのプロパティをfalseに設定するために.removeProp()メソッドを使用しないでください。ネイティブプロパティを削除すると、再度追加することはできません。詳細については、.removeProp()を参照してください。
XanatosLightfiren 2015年

2

2018年、JQueryなし

私は質問がJQueryについてであることを知っています:この答えは単なる参考です。

document.getElementById('edit').addEventListener(event => {
    event.preventDefault();
    [...document.querySelectorAll('.inputDisabled')].map(e => e.disabled = false);
}); 

0

この質問は特にjQueryについて言及していますが、jQueryなしでこれを達成したい場合、JavaScriptでの同等のものは次のとおりです。

elem.removeAttribute('disabled');

elem.removeAttr('disabled');私のために働く
Cheng Hui Yuan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.