2

我正在使用“One”来连接点击处理程序。

Jquery 的 "one" 方法将连接一个事件处理程序并在第一次调用后将其分离,但似乎如果您单击得足够快,则可能会有多个事件处理程序排队并导致回调运行不止一次。

前任:

$("#button").one("click", function () {

            //run logic

});

我怎样才能防止这种行为。我假设“One”将在第一次运行后分离处理程序,但如果您在运行回调时单击该按钮,假设它将第二次运行是否合理?

4

1 回答 1

4

我假设“One”将在第一次运行后分离处理程序

不正确,.one将在运行处理程序函数之前分离事件处理程序。如果您查看.one源代码,.off则会在调用处理程序函数之前触发 。

if (one === 1) {
    origFn = fn;
    fn = function (event) {
        jQuery().off(event);  //Your event is unregistered here
        return origFn.apply(this, arguments); //Your handler is called
    };
    fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
}

正如 Frédéric Hamidi 在评论中指出的那样,

即使处理程序在执行过程中重新触发了事件,新事件的实际处理也不会发生,直到当前处理程序返回并且原始事件完全解决(如果允许事件冒泡,可能涉及其他处理程序) DOM 树)。到那时,处理程序在这两种情况下都将被删除。

证明:http: //jsfiddle.net/skram/abcvW/2/

于 2012-06-11T19:02:38.157 回答