0

入力オブジェクトで「クリック」関数を呼び出すのに少し問題があります。関数はイベントを入力に割り当てます。

function v_start() {
      $('#next').click(function(){
                    v_check();
      });
}

今私が持っているjavascriptファイルname.jsとname2.jsに:コードをコピーする

$(function(){
      v_start();
});

は一例ですが、この場合、関数 v_check は 1 回のクリック入力で 2 回呼び出されます。イベントを一度だけにする条件や方法は?2番目のイベントが上書きされないのはなぜですか?

4

4 に答える 4

3

バインドを解除してバインドし、イベントハンドラーが1回だけ追加されるようにします。

$("#mySelector").unbind("click").bind("click",myFunction) 

複数のイベントリスナーがある場合:

var myFunction = function(e){ /// my code }

$("#mySelector").unbind("click",myFunction).bind("click",myFunction) 
于 2012-04-08T12:51:59.100 に答える
1

各ファイルで 2 回呼び出すのでv_start、明らかにイベントを 2 回バインドします。clickイベントがすでに次のように処理されているかどうかを簡単に確認できます。

function v_start() {
    var $next = $('#next');
    $next.data('events').click || $next.click(v_check);
}
于 2012-04-08T12:53:04.673 に答える
1

使用する:

$( ".mybutton" ).off('click').on('click', function() { 
// same code
}); 

これは私にとって最善の解決策です。

$(".mybutton").unbind("click",myFunction).bind("click",myFunction)
于 2015-08-04T05:17:04.940 に答える
1

jQuery でイベントを処理するたびに、ハンドラーがリストに追加されます。「上書き」はありません。

この場合、イベントが 2 回割り当てられるのを避けるための簡単な解決策は、たとえばこのように、イベントが既にアタッチされていることを示すデータ フラグをアタッチすることです。

function v_start() {
    if (!$('#next').data('click-handled')) {
        $('#next').data('click-handled', true).click(function(){
            v_check();
        });
    }
}

(イベントのリストを手動で取得して、関数がそこにあるかどうかを確認することもできますが、それはかなり複雑です。)

于 2012-04-08T12:44:22.713 に答える