1

1つのハンドラーを多くのイベントにバインドし、複数のイベントが発生した場合でもハンドラーが1回だけ呼び出されるようにするにはどうすればよいですか?

$(".element").bind("click select" ,handl);
function handl (e) 
{ 
     //my code
}

このコードの問題は、handlがイベントごとに2回呼び出されることです。両方のイベントが発生した場合にハンドラーを1回だけ呼び出す必要があると思われる場合は、このコードのハンドラーを2回呼び出す必要があると思うので、教えてください。

4

2 に答える 2

4

正しく理解できたかどうかはわかりませんが、1つのユーザーアクションから複数のイベントがハンドラー関数を複数回呼び出すのを防ごうとしていると思います。

var isExecuting = false;
$(".element").bind("click focus" ,function () {    
    if (isExecuting) return false;
    isExecuting = true;
    handl.call(this); //maintain the context
    isExecuting = false;
});
function handl (e) 
{ 
    //your code
}
于 2013-01-14T21:28:36.780 に答える
1

クロージャーを使用して、このようにイベント関数をラップします

$("#a").bind("click focus", function () {
    var fired = false;
    return function() {
        if (!fired) {
           alert("click occured");
           fired = true;
        }  
    } 
}());

ここのjsfiddle

于 2013-01-14T21:39:59.007 に答える