jQueryで入力を無効/有効にしますか?


2291
$input.disabled = true;

または

$input.disabled = "disabled";

標準的な方法はどれですか?そして逆に、無効にされた入力をどのように有効にしますか?



1
DependsOnプラグインが見つかりました。これは便利かもしれません
Onshop

回答:


3810

jQuery 1.6以降

disabledプロパティを変更するには、.prop()関数を使用する必要があります。

$("input").prop('disabled', true);
$("input").prop('disabled', false);

jQuery 1.5以下

.prop()関数が存在しませんが.attr()似て行います。

無効化された属性を設定します。

$("input").attr('disabled','disabled');

再び有効にするには、適切な方法は .removeAttr()

$("input").removeAttr('disabled');

jQueryのすべてのバージョン

1つの要素のみを処理する場合は、常に実際のDOMオブジェクトに依存することができ、おそらく他の2つのオプションよりも少し高速です。

// assuming an event handler thus 'this'
this.disabled = true;

.prop()または.attr()メソッドを使用する利点は、選択した一連のアイテムのプロパティを設定できることです。


注: 1.6であり.removeProp()のようにたくさんの音の方法removeAttr()、それは使用すべきではないようなネイティブの性質上'disabled' の文書からの抜粋:

注:このメソッドを使用して、チェック済み、無効、または選択済みなどのネイティブプロパティを削除しないでください。これにより、プロパティが完全に削除されます。一度削除すると、要素に再度追加することはできません。代わりに.prop()を使用して、これらのプロパティをfalseに設定してください。

実際、この方法には多くの正当な用途があるとは思えません。ブールプロップは、1.5の「属性」のように「削除」するのではなく、falseに設定する方法で行われます。


9
余談ですが、すべてのフォーム入力コントロールを無効にしたい場合は、それを含めてください。チェックボックス、ラジオ、テキストエリアなど- ':input'だけでなく、選択する必要があります'input'。後者は実際の<input>要素のみを選択します。
Cornel Masson、

35
@CornelMassonはinput,textarea,select,button少し良く使用するよりも:input- :inputそれは選択する必要があるため、セレクタが非常に非効率的であるとして*タグ名により、各要素とフィルタをループを-あなたは4つのタグ名セレクタを渡した場合、直接それははるかに高速です。また、これ:inputは標準のCSSセレクタではないため、パフォーマンスの向上querySelectorAllは失われます
gnarf

3
これはユーザーがアクセスできないようにするだけですか、それとも実際にWebリクエストから削除しますか?
OneChillDude 2013年

4
これを使用する.removeProp("disabled")と、@ ThomasDavidBakerが指摘する「プロパティが完全に削除され、再度追加されない」という問題が発生しました。これは、Chromeなどの一部のブラウザーの場合、Firefoxなどの一部のブラウザーでは問題なく機能していました。ここでは注意が必要です。常に.prop("disabled",false)代わりに使用する
Sandeepan Nath 2014

6
アンカー要素を無効にするには、.propも.attrも十分ではありません。.propは「コントロール」をグレー表示しません(.attrはグレー表示されますが、hrefはまだアクティブです)。preventDefault()を呼び出すクリックイベントハンドラーも追加する必要があります。
Jeff Lowery 2014

61

新しい規則のために&&順応性を高めるために(ECMA6で大幅に変更されない限り(????):

$(document).on('event_name', '#your_id', function() {
    $(this).removeAttr('disabled');
});

そして

$(document).off('event_name', '#your_id', function() {
    $(this).attr('disabled','disabled');   
});

12
ジークス!なぜの$(document).on('event_name', '#your_id', function() {...})代わりに$('#your_id').on('event_name', function() {...})jQuery .on()のドキュメントで説明されているように、前者は委譲を使用し、バブルアップするすべての event_nameイベントをリッスンしdocumentそれらが一致するかどうかを確認します#your_id。後者は特に$('#your_id')イベントのみをリッスンし、より適切にスケーリングします。
PeterV.Mørch、2013

23
前者は任意の時点でDOMに挿入された要素に対して機能し、後者はその時点で存在する要素に対してのみ機能します。
crazymykl 2013年

1
@crazymykl正解ですが、ページに既に存在するIDの要素を追加しないでください。
SepehrM 2016

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


13
$("input")[0].disabled = true;

または

$("input")[0].disabled = false;

2
もちろん、jQueryを要求する質問です。これにより、プレーンなJavaScriptの状態が変わりますが、機能します。
基本6 2014年

1
これはJavaScriptの状態を変更しますが、jQueryセレクターを使用して最初の入力を取得します。
cjsimon

3
しかし、私たちはここでjqueryの百科事典を作成しているとは思いません。もし答えが機能すればそれは良いことです
Sajjad Shirazy

8

あなたはこれをあなたのコードのどこかにグローバルに置くことができます:

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

3
機能をラップすることは便利ですが、正しく機能するためには、プロパティを使用propずに 使用する必要がattrありdisabledます(jQuery 1.6以降を想定)。
コーディングを終了

1
@TrueBlueAussie使用の欠点は何attrですか?私はいくつかのプロジェクトで上記のコードを使用し、それが問題なく機能することを覚えている限り
Nicu Surdu

1
明らかな例外は、舞台裏のプロパティを持つコントロールです。最も有名なのcheckedはチェックボックスのプロパティです。を使用しattrても同じ結果は得られません。
コーディングが

7

現在の状態を反転したいだけの場合(トグルボタンの動作など):

$("input").prop('disabled', ! $("input").prop('disabled') );

1
ありがとう、トグルも同じです。$( "input")。prop( 'disabled'、function(i、v){return!v;});
Floww

5

それらを使用して任意の要素を有効/無効にすることができる多くの方法があります

アプローチ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を使用して要素を有効または無効にする方法です。


2

2018年の更新:

今そこにjQueryのは必要ません、それはしばらく以来となっていますdocument.querySelectordocument.querySelectorAll(複数の要素のために)$、加えて、より明確なものとほとんど同じ仕事をしますgetElementByIdgetElementsByClassNamegetElementsByTagName

「input-checkbox」クラスの1つのフィールドを無効にする

document.querySelector('.input-checkbox').disabled = true;

または複数の要素

document.querySelectorAll('.input-checkbox').forEach(el => el.disabled = true);

1
質問は具体的にjQueryについて尋ねます...しかし、同じようにあなたのステートメントは正しいので、複数の要素がある場合、jQuery をこれに使用する必要がないことを知っておく価値があります。
ADyson 2018年

2

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>

1

無効化:

$('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.

1

入力タイプのtrueを無効にする:

特定の入力タイプの場合(例:テキストタイプ入力

$("input[type=text]").attr('disabled', true);

すべてのタイプの入力タイプ

$("input").attr('disabled', true);

1
おかげで、入力名を分離することができました。 $("input[name=method]").prop('disabled', true);
ハリーボッシュ

1

これは私のために働く

$("#values:input").attr("disabled",true);
$("#values:input").attr("disabled",false);

0

@gnarf回答を使用し、関数として追加しました

   $.fn.disabled = function (isDisabled) {
     if (isDisabled) {
       this.attr('disabled', 'disabled');
     } else {
       this.removeAttr('disabled');
     }
   };

次に、このように使用します

$('#myElement').disable(true);

0

2018、JQueryなし(ES6)

すべて無効にするinput

[...document.querySelectorAll('input')].map(e => e.disabled = true);

無効にinputするid="my-input"

document.getElementById('my-input').disabled = true;

問題はJQuery に関するもの、FYIだけです。




-1
<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>

1
レビューキューから:回答の前後にコンテキストを追加してください。コードのみの回答は理解が困難です。投稿に情報を追加できれば、質問者と将来の読者の両方に役立ちます。
RBT 2017年

-1

jQuery Mobileの場合:

無効にする

$('#someselectElement').selectmenu().selectmenu('disable').selectmenu('refresh', true);
$('#someTextElement').textinput().textinput('disable');

有効にする

$('#someselectElement').selectmenu().selectmenu('enable').selectmenu('refresh', true);
$('#someTextElement').textinput('enable');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.