回答:
disabled
プロパティを変更するには、.prop()
関数を使用する必要があります。
$("input").prop('disabled', true);
$("input").prop('disabled', false);
.prop()
関数が存在しませんが.attr()
似て行います。
無効化された属性を設定します。
$("input").attr('disabled','disabled');
再び有効にするには、適切な方法は .removeAttr()
$("input").removeAttr('disabled');
1つの要素のみを処理する場合は、常に実際のDOMオブジェクトに依存することができ、おそらく他の2つのオプションよりも少し高速です。
// assuming an event handler thus 'this'
this.disabled = true;
.prop()
または.attr()
メソッドを使用する利点は、選択した一連のアイテムのプロパティを設定できることです。
注: 1.6であり.removeProp()
のようにたくさんの音の方法removeAttr()
、それは使用すべきではないようなネイティブの性質上'disabled'
の文書からの抜粋:
注:このメソッドを使用して、チェック済み、無効、または選択済みなどのネイティブプロパティを削除しないでください。これにより、プロパティが完全に削除されます。一度削除すると、要素に再度追加することはできません。代わりに.prop()を使用して、これらのプロパティをfalseに設定してください。
実際、この方法には多くの正当な用途があるとは思えません。ブールプロップは、1.5の「属性」のように「削除」するのではなく、falseに設定する方法で行われます。
':input'
だけでなく、選択する必要があります'input'
。後者は実際の<input>要素のみを選択します。
input,textarea,select,button
少し良く使用するよりも:input
- :input
それは選択する必要があるため、セレクタが非常に非効率的であるとして*
タグ名により、各要素とフィルタをループを-あなたは4つのタグ名セレクタを渡した場合、直接それははるかに高速です。また、これ:input
は標準のCSSセレクタではないため、パフォーマンスの向上querySelectorAll
は失われます
.removeProp("disabled")
と、@ ThomasDavidBakerが指摘する「プロパティが完全に削除され、再度追加されない」という問題が発生しました。これは、Chromeなどの一部のブラウザーの場合、Firefoxなどの一部のブラウザーでは問題なく機能していました。ここでは注意が必要です。常に.prop("disabled",false)
代わりに使用する
新しい規則のために&&順応性を高めるために(ECMA6で大幅に変更されない限り(????):
$(document).on('event_name', '#your_id', function() {
$(this).removeAttr('disabled');
});
そして
$(document).off('event_name', '#your_id', function() {
$(this).attr('disabled','disabled');
});
$(document).on('event_name', '#your_id', function() {...})
代わりに$('#your_id').on('event_name', function() {...})
。jQuery .on()のドキュメントで説明されているように、前者は委譲を使用し、バブルアップするすべての event_name
イベントをリッスンし、document
それらが一致するかどうかを確認します#your_id
。後者は特に$('#your_id')
イベントのみをリッスンし、より適切にスケーリングします。
// Disable #x
$( "#x" ).prop( "disabled", true );
// Enable #x
$( "#x" ).prop( "disabled", false );
入力やテキストエリアなどのフォーム要素を無効/有効にする必要がある場合があります。JQueryは、disabled属性を "disabled"に設定することで、これを簡単に行うことができます。たとえば:
//To disable
$('.someElement').attr('disabled', 'disabled');
無効な要素を有効にするには、この要素から「無効」属性を削除するか、その文字列を空にする必要があります。たとえば:
//To enable
$('.someElement').removeAttr('disabled');
// OR you can set attr to ""
$('.someElement').attr('disabled', '');
参照:http : //garmoncheg.blogspot.fr/2011/07/how-to-disableenable-element-with.html
$("input")[0].disabled = true;
または
$("input")[0].disabled = false;
あなたはこれをあなたのコードのどこかにグローバルに置くことができます:
$.prototype.enable = function () {
$.each(this, function (index, el) {
$(el).removeAttr('disabled');
});
}
$.prototype.disable = function () {
$.each(this, function (index, el) {
$(el).attr('disabled', 'disabled');
});
}
そして、あなたは次のようなものを書くことができます:
$(".myInputs").enable();
$("#otherInput").disable();
prop
せずに 使用する必要がattr
ありdisabled
ます(jQuery 1.6以降を想定)。
attr
ですか?私はいくつかのプロジェクトで上記のコードを使用し、それが問題なく機能することを覚えている限り
checked
はチェックボックスのプロパティです。を使用しattr
ても同じ結果は得られません。
それらを使用して任意の要素を有効/無効にすることができる多くの方法があります:
アプローチ1
$("#txtName").attr("disabled", true);
アプローチ2
$("#txtName").attr("disabled", "disabled");
jQuery 1.7以降のバージョンを使用している場合は、attr()ではなくprop()を使用してください。
$("#txtName").prop("disabled", "disabled");
要素を有効にしたい場合は、それを無効にするために行ったのと反対のことをしなければなりません。ただし、jQueryは属性を削除する別の方法を提供します。
アプローチ1
$("#txtName").attr("disabled", false);
アプローチ2
$("#txtName").attr("disabled", "");
アプローチ3
$("#txtName").removeAttr("disabled");
ここでも、jQuery 1.7以降のバージョンを使用している場合は、attr()の代わりにprop()を使用します。それです。これは、jQueryを使用して要素を有効または無効にする方法です。
2018年の更新:
今そこにjQueryのは必要ません、それはしばらく以来となっていますdocument.querySelector
かdocument.querySelectorAll
(複数の要素のために)$、加えて、より明確なものとほとんど同じ仕事をしますgetElementById
、getElementsByClassName
、getElementsByTagName
「input-checkbox」クラスの1つのフィールドを無効にする
document.querySelector('.input-checkbox').disabled = true;
または複数の要素
document.querySelectorAll('.input-checkbox').forEach(el => el.disabled = true);
jQuery prop()メソッドを使用して、jQueryを使用してフォーム要素またはコントロールを動的に無効または有効にすることができます。prop()メソッドにはjQuery 1.6以上が必要です。
例:
<script type="text/javascript">
$(document).ready(function(){
$('form input[type="submit"]').prop("disabled", true);
$(".agree").click(function(){
if($(this).prop("checked") == true){
$('form input[type="submit"]').prop("disabled", false);
}
else if($(this).prop("checked") == false){
$('form input[type="submit"]').prop("disabled", true);
}
});
});
</script>
無効化:
$('input').attr('readonly', true); // Disable it.
$('input').addClass('text-muted'); // Gray it out with bootstrap.
有効化:
$('input').attr('readonly', false); // Enable it.
$('input').removeClass('text-muted'); // Back to normal color with bootstrap.
これは私のために働く
$("#values:input").attr("disabled",true);
$("#values:input").attr("disabled",false);
@gnarf回答を使用し、関数として追加しました
$.fn.disabled = function (isDisabled) {
if (isDisabled) {
this.attr('disabled', 'disabled');
} else {
this.removeAttr('disabled');
}
};
次に、このように使用します
$('#myElement').disable(true);
アプローチ4(これはワイルドコーダーの回答の拡張です)
このように使用し、
$( "#id" ).prop( "disabled", true );
$( "#id" ).prop( "disabled", false );
<html>
<body>
Name: <input type="text" id="myText">
<button onclick="disable()">Disable Text field</button>
<button onclick="enable()">Enable Text field</button>
<script>
function disable() {
document.getElementById("myText").disabled = true;
}
function enable() {
document.getElementById("myText").disabled = false;
}
</script>
</body>
</html>
jQuery Mobileの場合:
$('#someselectElement').selectmenu().selectmenu('disable').selectmenu('refresh', true);
$('#someTextElement').textinput().textinput('disable');
$('#someselectElement').selectmenu().selectmenu('enable').selectmenu('refresh', true);
$('#someTextElement').textinput('enable');