JavaScriptを使用してHTMLボタンを無効にする方法は?


186

disable次のように、属性としてではなく、タグに追加するだけでHTMLボタンを無効にする(物理的にクリックできないようにする)ことができると読みました。

<input type="button" name=myButton value="disable" disabled>

この設定は属性ではないので、JavaScriptを介して動的に追加して、以前に有効になっていたボタンを無効にする方法を教えてください。

回答:


274

この設定は属性ではないため

属性です。

一部の属性はブール値として定義されています。つまり、それらの値を指定して、他はすべて省略することができます。つまり、disabled = " disabled "の代わりに、太字の部分のみを含めます。HTML 4では、フルバージョンはサポートが限定された機能としてマークされているため、太字の部分のみ含める必要があります(ただし、仕様が作成された時点では、それほど正確ではありません)。

HTML 5以降、ルールが変更され、名前ではなく値のみが含まれるようになりました。名前と値は同じであるため、実際には違いはありません。

DOMプロパティはとも呼ばれるdisabledと取るブールですtruefalse

foo.disabled = true;

理論的には、foo.setAttribute('disabled', 'disabled');ともできますがfoo.removeAttribute("disabled")、古いバージョンのInternet Explorer(これは、に関してはバグが多いことで有名setAttributeです)では信頼できません。


両方を行い、プロパティを変更して属性を設定することは理にかなっていますか、それとも単なるやりすぎですか?
v010dya 2014年

何がfoo入ってるのfoo.disabled = true;?それはそのボタンのIDですか?
スタック

@stack —好きな方法で収集された要素への参照を保持する変数(たとえばquerySelector)
Quentin

146

無効にする

document.getElementById("btnPlaceOrder").disabled = true; 

有効にする

document.getElementById("btnPlaceOrder").disabled = false; 

3
どういうわけか、私に$('#btnPlaceOrder').disabled = false;はうまくいきませんでしたが、うまくいきませんでした。
levininja 14

4
$('#btnPlaceOrder')[0].disabled = falsejqueryセレクターとして使用した場合、配列が返されるようです。肩をすくめる。
チリー、2015年

6
jquery!== javascript。jqueryは配列のようなセレクターを返します。
AnilRedshift 2016年

@levininja、チリー— $( '#btnPlaceOrder')。prop( 'disabled'、false);
DominikSpäte2017

22

これは属性ですが、ブール値です(つまり、名前は必要なく、値だけが必要です-変です)。JavaScriptで同等のプロパティを設定できます。

document.getElementsByName("myButton")[0].disabled = true;

2
それは値を必要としません、それはそれが必要としない名前です。(奇妙ですが、本当です)。
Quentin

1
@David:以前に読んだことを覚えている、修正済み。それは確かに奇妙であり、構文ハイライターが正しくそれを尊重した場合、おそらくより意味があるでしょう:-)
Andy E


9

disabled属性を設定する公式の方法HTMLInputElementはこれです:

var input = document.querySelector('[name="myButton"]');
// Without querySelector API
// var input = document.getElementsByName('myButton').item(0);

// disable
input.setAttribute('disabled', true);
// enable
input.removeAttribute('disabled');

一方で@ kausharの答えは、有効化および無効化のために十分でありHTMLInputElement、そしておそらくIEのクロスブラウザの互換性のために好ましく、歴史的にバギーだsetAttribute、それが唯一の理由は動作しますが、Elementプロパティの影のElement属性を。プロパティが設定されている場合、DOMは同等の属性の値ではなく、デフォルトでプロパティの値を使用します。

プロパティと属性の間には非常に重要な違いがあります。true HTMLInputElement プロパティの例はinput.valueであり、以下はシャドウイングがどのように機能するかを示しています。

var input = document.querySelector('#test');

// the attribute works as expected
console.log('old attribute:', input.getAttribute('value'));
// the property is equal to the attribute when the property is not explicitly set
console.log('old property:', input.value);

// change the input's value property
input.value = "My New Value";

// the attribute remains there because it still exists in the DOM markup
console.log('new attribute:', input.getAttribute('value'));
// but the property is equal to the set value due to the shadowing effect
console.log('new property:', input.value);
<input id="test" type="text" value="Hello World" />

これが、プロパティが属性をシャドウしていると言うことです。この概念は、prototypeチェーン上の継承されたプロパティにも適用されます。

これにより、プロパティと属性の違いに関する混乱が明らかになることを願っています。


5

それはまだ属性です。次のように設定します。

<input type="button" name=myButton value="disable" disabled="disabled">

...は有効です。


1
有効ですが、仕様では構文を回避する必要があるとされています:w3.org/TR/html4/appendix/notes.html#hB.3.3
Quentin

2
すべてのブラウザーがdisabled = "disabled"を探しますが、それを回避するために仕様に記載されていますが、disabled = "disabled"、checked = "checked"、またはselected = "selected"の設定で問題が発生したことはありません... t do disabled = "true" ...一部のブラウザのみがそれを認識します
Bob Fincheimer

明らかに、すべてのブラウザでサポートされているわけではありません。そうでない場合、仕様はそれほど明示的ではありません。彼らはもはやもはや一般的な使用法ではありません。
Quentin

1
ところで、質問には「JavaScriptを使用して動的にこれを追加するにはどうすればよいですか」という質問が含まれています
Quentin

もちろん問題は、障害者が属性ではないことについて話し続けます。私の答えは、それを払拭し、属性として使用できると言うことです。DOMプロパティを使用することできます。
Oli

4

bという名前のボタンオブジェクトがある場合: b.disabled=false;


3

私は最良の方法は次のようになると思います:

$("#ctl00_ContentPlaceHolder1_btnPlaceOrder").attr('disabled', true);

クロスブラウザで正常に動作します。


4
それはそうであるべきでpropはありませんattr
Antti Haapala

1
質問はネイティブのjsソリューションを探しています
behradkhodayar 2017

0
<button disabled=true>text here</button>

属性は引き続き使用できます。「値」の代わりに「無効」属性を使用するだけです。


それはまたはdisabled="disabled"単にdisabledです。文字列値は"disabled"disabled="true"およびを含め、と同等disabled="false"です。
user4642212 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.