0

こんにちは、ユーザーが送信するときにすべてのボタンを無効にしようとしているので、ページの読み込み中に再度送信したり、他のアクションを実行したりできません。ただし、ページには既に無効なボタンがある可能性があるため、単純に行うことはできません

$('.btn').attr('disabled', 'disabled'); 

それから

$('.btn').removeAttr('disabled');

フォームが目立たない検証に失敗した場合は、ボタンを再度有効にする必要があります。

twitter-bootstrap には .button('loading') と .button('reset') がありますが、それはボタンのテキストを「読み込み中」に置き換えます。私はそれらを単に無効にすることを好みます。

これを行う簡単な方法はありますか?

4

5 に答える 5

1

まだ無効になっていないものを見つけて、クラスを指定して無効にします。

$('.btn').filter(function() {
   return !this.disabled;
}).addClass('disabled_now').prop('disabled', true);

それらを再度有効にするには、次のようにします。

$('.disabled_now').removeClass('disabled_now').prop('disabled', false);
于 2013-05-23T22:40:38.613 に答える
1

jQuery は流暢であるため、

$('.btn').attr('disabled', 'disabled'); 

変更された項目の配列を返します。次のように保存できます。

var disabledBtns = $('.btn').attr('disabled', 'disabled'); 

アップデート

まだ無効になっていないボタンのみを取得するには、次のようにフィルターします。

var disabledBtns = $('.btn:not(:disabled)').attr('disabled', 'disabled'); 

そうすれば、有効になっているボタンを保存して無効にできます。

于 2013-05-23T22:40:47.507 に答える
1

試す :

var $non_disabled_buttons = $('.btn').filter(function() {
    return !$(this).is(':disabled');
}).attr('disabled', true);

次に、それらを再度有効にします。

$non_disabled_buttons.attr('disabled', false); 
于 2013-05-23T22:40:52.633 に答える
0

他の回答にはメリットがありますが、変数を使用して無効なオブジェクトのリストを保存します。DOM はさまざまな時点で変更される可能性があり、JS 変数に格納されているコントロール リストなどを無効にする可能性があるため、これは私には少し洗練されていないように思えます。

私の解決策は、無効にするボタンにクラスを適用し、再度有効にするときにjQueryセレクターでそのクラスを使用することです。何かのようなもの:

// disable buttons
$(':button').not('[disabled]').addClass("dis_temp").attr("disabled","disabled");

// do something
//...

// enable buttons disabled above
$('.dis_temp').attr("disabled", null).removeClass("dis_temp");

DOM クラスを使用してオブジェクトをグループ化することは、かなり一般的な方法のようです。

ほとんどの場合、ボタンをそのままにして、モーダル jQueryUI ダイアログを使用することを好みます。それは私が推測するスタイルの問題です。

于 2013-05-23T23:39:00.460 に答える