web-dev-qa-db-ja.com

jQueryを使用した入力無効属性の切り替え

ここに私のコードがあります:

$("#product1 :checkbox").click(function(){
    $(this)
        .closest('tr') // Find the parent row.
            .find(":input[type='text']") // Find text elements in that row.
                .attr('disabled',false).toggleClass('disabled') // Enable them.
                .end() // Go back to the row.
            .siblings() // Get its siblings
                .find(":input[type='text']") // Find text elements in those rows.
                .attr('disabled',true).removeClass('disabled'); // Disable them.
});

.attr('disabled',false);を切り替えるにはどうすればよいですか?

Googleで見つけられないようです。

172
Tommy Arnold
$('#el').prop('disabled', function(i, v) { return !v; });

.prop() メソッドは2つの引数を受け入れます。

  • プロパティname(無効、チェック、選択)trueまたはfalseのいずれか
  • プロパティvalue、次のいずれかです:
    • empty)-現在の値を返します。
    • boolean(true/false)-プロパティ値を設定します。
    • function-見つかった要素ごとに実行され、戻り値はプロパティの設定に使用されます。渡される引数は2つあります。最初の引数はindex(見つかった要素ごとに0、1、2、増加)です。 2番目の引数は、要素の現在のvalue(true/false)です。

したがって、この場合、インデックス(i)と現在の値(v)を提供する関数を使用し、現在の値の反対を返したため、プロパティの状態が反転します。

401
Arne

Iguessブラウザーの完全な比較可能性を取得するにはdisabledは値disabledで設定するか、削除する必要があります!
ここに、私が作成した小さなプラグインを示します。

(function($) {
    $.fn.toggleDisabled = function() {
        return this.each(function() {
            var $this = $(this);
            if ($this.attr('disabled')) $this.removeAttr('disabled');
            else $this.attr('disabled', 'disabled');
        });
    };
})(jQuery);

リンクの例

編集:連鎖性を維持するためにサンプルのリンク/コードを更新しました!
編集2:
@ lonesomedayコメントに基づいて、ここに拡張バージョンがあります。

(function($) {
    $.fn.toggleDisabled = function(){
        return this.each(function(){
            this.disabled = !this.disabled;
        });
    };
})(jQuery);
101
ifaour
 
 $( '#checkbox')。click(function(){
 $( '#submit')。attr( 'disabled'、!$(this).attr ( 'checked')); 
}); 
 

チェックボックスをクリックするだけで更新される別の簡単なオプション。

HTML:

<input type="checkbox" id="checkbox/>
<input disabled type="submit" id="item"/>

jQuery:

$('#checkbox').click(function() {
    if (this.checked) {
        $('#item').prop('disabled', false); // If checked enable item       
    } else {
        $('#item').prop('disabled', true); // If checked disable item                   
    }
});

動作中: link

2
Jeroen Goedhart

しばらくして、@ arneのおかげで、入力を無効にするか非表示にするか、有効にするか表示するかを処理する同様の小さな関数を作成しました。

function toggleInputState(el, on) {
  // 'on' = true(visible) or false(hidden)
  // If a field is to be shown, enable it; if hidden, disable it.
  // Disabling will prevent the field's value from being submitted
  $(el).prop('disabled', !on).toggle(on);
}

次に、jQueryオブジェクト($( 'input [name = "something"]'など))を次のように単純に切り替えます:

toggleInputState(myElement, myBoolean)
2
eon

attr のコールバック構文を使用すると、これは非常に簡単です。

$("#product1 :checkbox").click(function(){
  $(this)
   .closest('tr') // find the parent row
       .find(":input[type='text']") // find text elements in that row
           .attr('disabled',function(idx, oldAttr) {
               return !oldAttr; // invert disabled value
           })
           .toggleClass('disabled') // enable them
       .end() // go back to the row
       .siblings() // get its siblings
           .find(":input[type='text']") // find text elements in those rows
               .attr('disabled',function(idx, oldAttr) {
                   return !oldAttr; // invert disabled value
               })
               .removeClass('disabled'); // disable them
});
1
lonesomeday