jQueryを使用して選択フィールドを無効/有効にする方法は?


178

次のような形式でオプションを作成したい

[] I would like to order a [selectbox with pizza] pizza

ここで、チェックボックスがオンの場合にのみ選択ボックスが有効になり、オフの場合は無効になります。

私はこのコードを思いつきます:

<form>
<input type="checkbox" id="pizza" name="pizza" value="yes"> <label for="pizza">
I would like to order a</label>
<select name="pizza_kind">
    <option>(choose one)</option>
    <option value="margaritha">Margaritha</option>
    <option value="hawai">Hawai</option>
</select>
pizza.
</form>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">
</script>
<script>
var update_pizza = function () {
    if ($("#pizza").is(":checked")) {
        $("#pizza_kind").removeAttr("disabled");
    }
    else {
        $("#pizza_kind").prop('disabled', 'disabled');
    }
};

$(update_pizza);
$("#pizza").change(update_pizza);
</script>

私が使用してdisabled属性を設定する方法をさまざまな方法を試してみました.prop().attr().disabled=。ただし、何も起こりません。の<input type="checkbox">代わりにに適用する<select>と、コードは完全に機能します。

<select>jQueryを使用して無効/有効にする方法は?


こんにちは、このアプローチはIE 10で機能しますか?IE 10で選択フィールドを有効にする方法がわからない
ROROROOROROR

回答:


301

次のようなコードを使用したいとします。

<form>
  <input type="checkbox" id="pizza" name="pizza" value="yes">
  <label for="pizza">I would like to order a</label>
  <select id="pizza_kind" name="pizza_kind">
    <option>(choose one)</option>
    <option value="margaritha">Margaritha</option>
    <option value="hawai">Hawai</option>
  </select>
  pizza.
</form>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
  var update_pizza = function () {
    if ($("#pizza").is(":checked")) {
        $('#pizza_kind').prop('disabled', false);
    }
    else {
        $('#pizza_kind').prop('disabled', 'disabled');
    }
  };
  $(update_pizza);
  $("#pizza").change(update_pizza);
</script>

実例はこちら


33
$('#pizza_kind').prop('disabled', false);$('#pizza_kind').prop('disabled', true);jQueryのドキュメントは言うプロパティは、一般的にシリアライズされたHTML属性を変更することなく、DOM要素の動的な状態に影響を与えます。例には、入力要素のvalueプロパティ、入力とボタンのdisabledプロパティ、またはチェックボックスのcheckedプロパティが含まれます。.attr()メソッドの代わりに、.prop()メソッドを使用して無効化およびチェックを設定する必要があります。値の取得と設定には.val()メソッドを使用する必要があります。
2013年

2
jQuery 3の場合、「$( '#pizza_kind')。prop( 'disabled'、true / false);」である必要があります。私が知る限り
Gennady G

3
$(update_pizza);とは やってる?関数をjqueryオブジェクトにラップしますか?
エドワード

120

選択を最初に無効/有効にするには、選択にはまずIDまたはクラスが必要です。次に、このようなことをすることができます:

無効にする:

$('#id').attr('disabled', 'disabled');

有効化:

$('#id').removeAttr('disabled');

7
「.attr()メソッドではなく、.prop()メソッドを使用して無効化およびチェックを設定する必要があります」ソース:api.jquery.com/prop
Colin

2
これは、はるかに良い:)スキミング用..選択解答する必要があります
quemeful

これは答えべきではありません.removeAttr()falseにもはやセットのプロパティjquery.com/upgrade-guide/3.0/... stackoverflow.com/a/13626565/125981
マーク・庄屋

24

Disabledは、WHATWGで述べられているように、select要素のブール属性です。つまり、jQueryを使用してRAY WAY TO DISABLEを実行すると、

jQuery("#selectId").attr('disabled',true);

これにより、このHTMLが作成されます

<select id="selectId" name="gender" disabled="disabled">
    <option value="-1">--Select a Gender--</option>
    <option value="0">Male</option>
    <option value="1">Female</option>
</select>

これはXHTMLとHTMLの両方で機能します(W3Schoolリファレンス)

しかし、それをプロパティとして使用して行うこともできます

jQuery("#selectId").prop('disabled', 'disabled');

取得

<select id="selectId" name="gender" disabled>

これはHTMLでのみ機能し、XTMLでは機能しません

注:無効化された要素は、この質問で回答されたフォームでは送信されません無効化されたフォーム要素は送信されません

注2:無効になっている要素はグレー表示される場合があります。

注3:

無効になっているフォームコントロールは、ユーザーインタラクションタスクソースでキューに入れられているクリックイベントが要素でディスパッチされないようにする必要があります。

TL; DR

<script>
    var update_pizza = function () {
        if ($("#pizza").is(":checked")) {
            $('#pizza_kind').attr('disabled', false);
        } else {
            $('#pizza_kind').attr('disabled', true);
        }
    };
    $(update_pizza);
    $("#pizza").change(update_pizza);
</script>

16

単に使用してください:

var update_pizza = function () {
     $("#pizza_kind").prop("disabled", !$('#pizza').prop('checked'));
};

update_pizza();
$("#pizza").change(update_pizza);

DEMO


8

以下を使用します。

$("select").attr("disabled", "disabled");

または単に次のようid="pizza_kind"<select>タグに追加し<select name="pizza_kind" id="pizza_kind">ます:jsfiddle link

コードが機能しなかった理由$("#pizza_kind")は、<select>要素がないために要素が選択されていないためid="pizza_kind"です。

編集:実際には、より良いセレクターは$("select[name='pizza_kind']")jsfiddleリンクです


5

あなたは、selectID、名前だけを持っていません。セレクターを変更する必要があります。

$("#pizza").on("click", function(){
  $("select[name='pizza_kind']").prop("disabled", !this.checked);
});

デモ:http : //jsbin.com/imokuj/2/edit


5

古いスレッドで答えて申し訳ありませんが、私のコードが将来的に他の人を助けるかもしれません。

$("[id*='chkAddressChange']").click(function () {
    var checked = $(this).is(':checked');
    if (checked) {
        $('.DisabledInputs').removeAttr('disabled');
    } else {
        $('.DisabledInputs').attr('disabled', 'disabled');
    }
});

2

良い質問です-これを達成する唯一の方法は、select内のアイテムをフィルターすることです。
jqueryプラグインを使用してこれを行うことができます。次のリンクを確認してください。必要なものに似たものを達成する方法が説明されています。おかげで
ラジオに基づいてjQueryの無効SELECTオプションは、選択した(すべてのブラウザの必要性のサポート)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.