5

私はもともと、シングルクリックイベントで送信を行うことを望んでいました。

    $("#booking_Form #submit_Booking").bind("click", function(event){.....

それから私は(明らかに)ダブルクリックが重複した提出につながることを発見しました。

だから私はこれをキャプチャして抑制しようとしました:

    $("#booking_Form #submit_Booking").bind("dblclick", function(event){
          return false;
    });

しかし、シングルクリックイベントはまだ2回発生しました。

ダブルクリックが2回送信されないことが不可欠な場合は、シングルクリックイベントをダブルクリックイベントに変更する必要があると考えて修正しますか。

または、ダブルクリックをオフにするグローバルな方法はありますか。

4

6 に答える 6

7

を使用する必要があります.one()。そうすれば、その後のすべてのクリックは何もしません

$("#booking_Form #submit_Booking").one("click", function(event) {
    //do something
});

リンク: http://api.jquery.com/one/

編集: を使用したい場合は.one()、このようなことをするのはどうですか...

ジャバスクリプト:

$(document).ready(function(){
     $("#b1").one("click", function(e){
        ajaxFunction();
     });   

    function ajaxFunction(){
         $("#b1").one("click", function(e){
             ajaxFunction()
         });

        $.ajax({
            type: "POST",
            url: "http://fiddle.jshell.net/", //use actual URL
            success: function(data){
               //do something    
            }
        });           
    }
});​

デモ: http://jsfiddle.net/BKqm9/13/

于 2012-12-03T15:44:29.637 に答える
4

クリック ハンドラーで入力を無効にするだけで、ユーザーが 2 回目のクリックを行うことができなくなります。クリック ハンドラーのロジックが終了したら、再度有効にします。したがって、次のようにすることができます。

$("#booking_Form #submit_Booking").bind("click", function(event){
   $(this).attr('disabled','true');
   ...
   ...
   var btn = $(this);
   $.ajax('someurl.php',{success: function(){
          ...
          ...
          btn.removeAttr('disabled');
    }
   })
}
于 2012-12-03T15:34:46.950 に答える
2

クロージャでラップして、ダーティ フラグ変数を使用できます。(フラグがグローバルではないため閉鎖)

(function(){
    var dirtyFlag = false;
    $('#clicker').click(function(){
        if (dirtyFlag) return;
        dirtyFlag = true;
        setTimeout(function(){
            console.log('clean and proceeding');
            dirtyFlag = false;
        }, 500);
    });
})();​

ここでフィドル。ボタンを無効にすることはオプションではないため、これは IMO で最もクリーンでシンプルなソリューションです。

于 2012-12-03T15:54:39.017 に答える
1

キューイング方法が必要な場合は、次のようなものを試してください:(単なるモックアップ)

$('<div>').clearQueue('buttonQueue');

$("#booking_Form #submit_Booking").bind("click", function(event) {
    $('<div>').clearQueue('buttonQueue');
    $('<div>').queue('buttonQueue', myFunctionHere());
});

これを DocumentReady 関数に入れれば問題ありません。

于 2012-12-03T15:46:21.113 に答える
1

これは役立つかもしれません:

$("#booking_Form #submit_Booking").bind("click", function(e) {

    // custom handling here
    e.preventDefault();
    e.stopPropagation();
}​

試してみる。

于 2012-12-03T15:55:02.663 に答える