0

次のコードがあります。

var wait = 500;
$(document).on("click",".new_game_list_row",function(event){
        var self = $(this);
        //As the element clicked on has it's data attributes defined
        //Retrieves it when the element is clicked on
        var id_quiz_list = self.data('quizlistId'),
            difficult = self.data('difficult');
            userid = $("#new_game_list_wrap").data('userid');
                setTimeout(function(){
                    $.post("new_game_add.php","userid="+userid+"&id_quiz_list="+id_quiz_list+"&difficult="+difficult,function(data){
                        $answer = data;
                        $("#new_game_list_wrap").fadeOut("slow",function(){
                            self.remove();
                            $("#quiz_list_wrap").append('<div class="quiz_list_row" data-quizlist-id="'+id_quiz_list+'" data-quizlevel-reached="0" '+
                            '><div class="inline list_cell" id="quiz_list_cell_rownew_id1">Quiz '+id_quiz_list+'</div><div '+
                            'class="inline list_cell" id="quiz_list_cell_rownew_id2">Current level: 1</div>');
                            showtrick(id_quiz_list,1);
                        }); 
                    }, "html");  
                }, wait);
    });

setTimeout()行の複数回のクリックを避けるために使用しようとしています。テーブルがゴースト エントリでいっぱいになっています。

遅延を試みましたが、うまくいきませんでした。

何か案が?

4

3 に答える 3

1

一見したところ、ミリ秒の整数値である必要がある「待機」がどこにも定義されていません。それ以外にも、より良いアプローチがあるかもしれません.

Cookie またはウィンドウ変数を使用して「isClickable」フラグを保存し、クリック可能な場合にのみロジックを実行できます。必要に応じて isClickable のオンとオフを切り替えます。ボタンの上に半透明の div を表示してグレー表示し、マウスでクリックできないようにすることもできます。

dom から要素を削除し、少し後で追加する正当な理由はないようです。要するに、タイムアウトに関して私が目にする唯一の問題は、待機が設定されていない可能性があることです。jQuery は、実際に dom 自体を操作するのではなく、別のルートに進んだほうがよいと思います。(非表示にするか、オーバーラップするか、代わりにクリックの処理を停止します)。

于 2012-12-31T02:18:13.747 に答える
0

クリック イベントに x 秒間アクションを無視させたい場合は、次のように記述できます。

HTML

​&lt;button>Click Me</button>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

JQuery

​$("button").click(function(){
    var $this = $(this);
    if(!$this.data("disabled")){
        alert("You clicked the button.  You won't be able to click it again for 5 seconds.");

        $this.data("disabled", true);
        setTimeout(function(){
            $this.data("disabled", false);
        }, 5000);
    }
});​​​​

jsfiddle でのデモ

ボタンのdisabledデータが に設定されている場合true、クリック イベントのコンテンツをスキップします。

そうでない場合はdisabled、コードを実行してから無効にします。を使用するsetTimeoutと、x 秒で再び有効になります。

于 2012-12-31T02:21:56.997 に答える
0

私はこれで解決しました:

var isClickable=true, wait = 500;
$(document).on("click",".new_game_list_row",function(event){

    if(isClickable) {
        isClickable = false;
        var self = $(this);
        //As the element clicked on has it's data attributes defined
        //Retrieves it when the element is clicked on
        var id_quiz_list = self.data('quizlistId'),
            difficult = self.data('difficult');
            userid = $("#new_game_list_wrap").data('userid');
            $("#new_game_list_wrap").fadeOut("slow");
            $.post("new_game_add.php","userid="+userid+"&id_quiz_list="+id_quiz_list+"&difficult="+difficult,function(data){
                $answer = data;
                    self.remove();
                    $("#quiz_list_wrap").append('<div class="quiz_list_row" data-quizlist-id="'+id_quiz_list+'" data-quizlevel-reached="0" '+
                    '><div class="inline list_cell" id="quiz_list_cell_rownew_id1">Quiz '+id_quiz_list+'</div><div '+
                    'class="inline list_cell" id="quiz_list_cell_rownew_id2">Current level: 1</div>');
                    showtrick(id_quiz_list,1);
            }, "html"); 
                setTimeout(function(){
                    isClickable = true;
                }, wait);
    }
});

問題が解決しました。

于 2012-12-31T03:18:50.003 に答える