我使用“One”连接点击处理程序。
Jquery的“one”方法将连接一个事件处理程序并在第一次调用后将其分离,但是如果你只是单击足够快,似乎排队多个事件处理程序并导致回调运行超过一旦。
例如:
$("#button").one("click", function () {
//run logic
});
如何防止此行为。我假设“One”将在第一次运行它之后分离处理程序,但如果在运行回调时单击该按钮,是否合理地假设它将再次运行?
答案 0 :(得分: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éricHamidi在评论中指出,
即使处理程序在执行期间重新触发事件,新事件的实际处理也不会发生,直到当前处理程序返回并且原始事件完全解析为止(如果允许事件,则可能涉及其他处理程序)冒泡DOM树)。到那时,处理程序将在两种情况下都被删除。