1

asp.net mvc 3 Web アプリケーション内に次のスクリプトを使用して、ユーザーがボタンをクリックしたときにすべての送信ボタンを無効にして、同じデータが連続して送信されないようにします。

$(document).ready(function () {
    $("input[type='submit']").click(function () {
        $(this).prop('disabled', true);
    });
});

上記のスクリプトは正常に動作していますが、「検索」などの送信ボタンを無効にすると、ユーザーがページを更新しない限り、別の検索を実行できなくなります。そのため、スクリプトを変更して、2 秒後に送信ボタンを再度有効にできるかどうかを考えていました。使い疲れましdelay()たが、うまくいきませんでした。

だから私は次の質問があります:

  1. 私のアプローチは遅延時間を定義するのに有効ですか?

  2. 遅延時間を定義してからボタンを再度有効にする方法。

4

3 に答える 3

2
$("input[type='submit']").click(function () {
        var $this = $(this);
        $this.prop('disabled', true);
        setTimeout(function() {
          $this.prop('disabled', false);
        },2000);
    });

デモ

于 2012-05-06T16:01:14.847 に答える
1

あなたが決めた2秒の遅延には同意しません。通話に 2 秒以上かかる場合はどうなりますか? 私たち全員が高速ブロードバンド接続に恵まれているわけではありません。:)ネットワーク遅延に関して行われる ほとんどすべての仮定は危険です。

はるかに優れたアプローチは、AJAX 呼び出しを使用し、そのコールバック関数を利用して、サーバーから応答が返されたタイミングを正確に知ることです。

から持ち上げた - http://api.jquery.com/jQuery.ajax/

$.ajax({
  url: 'ajax/test.html',
  success: function(data) {
    $('.result').html(data);
    alert('Load was performed.');
  }
});

無効にするすべての送信ボタンに特定のクラスを追加してみてください。のようなもの.canDisableで、すべての送信ボタンを無効にするときに、追加のセレクターを指定して、無効にするボタンを正確に特定できます。

$(document).ready(function () {
    $("input[type='submit']").filter(".canDisable").click(function () {
        $(this).prop('disabled', true);
    });
});

関数を使用して、クラス.filter()を含むすべての要素を除外しています。.canDisable


参考文献 -

于 2012-05-06T16:06:36.170 に答える