如何在jQuery中只对多个事件触发一次回调
How to trigger callback on multiple events only once in jQuery
当用户点击页面或按下任何键时,我只需要做一次操作。我通常会使用jQuery中的.one()函数来执行此操作,但回调会为两个事件调用一次,而不是总共调用一次:
$("html").one("click keydown", function() {
alert("event");
});
我无法调用$(this).unbind("click keydown")
,因为我不想解除可能绑定到元素的其他事件的绑定。
编辑:我之前应该提到过这一点,但绑定事件的代码被调用了多次,我希望每次绑定回调都运行一次。如果事件绑定了n次,我希望回调运行n次。
您可以在事件处理程序之外创建函数:
var onClickAndKeydown = function(){
alert("event");
}
然后使用.on():向事件添加处理程序click并向下键单击该函数
$("html").on("click keydown", onClickAndKeydown);
当您需要时,您可以使用.off():删除该函数的事件处理程序
$("html").off("click keydown", onClickAndKeydown);
.off()
方法删除与.on()
一起附加的事件处理程序。如果您在.off()
中指定函数的地址,那么将仅删除该函数的处理程序,因此仍将处理其他函数的处理程。
使用带名称空间的事件名称
$("html").one("click.myonce keydown.myonce", function () {
console.log("event");
$(this).off('click.myonce keydown.myonce')
});
演示:Fiddle
尝试使用off()之类的
$("html").on("click keydown", function(e) {
alert(e.type);
$(this).off("click keydown");
});
演示
您也可以为jQuery编写自己的插件,它可以很好地处理这一问题;
jQuery.fn.onceFor = function (events, func) {
var that = this;
this.on(events, function () {
that.off(events, func);
return func.apply(this, arguments);
});
};
然后你会通过它打电话;
$("html").onceFor("click keydown", function() {
alert("event");
});
相关文章:
- $watch回调每次在浏览器中触发,但在测试期间只触发一次
- 流星回拨天堂回拨一次又一次
- 如何在jQuery中只对多个事件触发一次回调
- 正则表达式回调函数只执行一次
- 回调函数不会在使用 $timeout 的服务中只调用一次
- 如何确保回调只添加一次
- 使用 setTimeout 调用一次 forEach 的回调函数即可完成
- 为什么 setInterval 回调只执行一次
- 一个函数,它接受回调并创建只能调用一次的新版本的回调.Javascript
- 防止ajax回调settimeout每次单击执行一次以上
- 回调-第二次回调后出错
- 如何知道回调循环的哪一次迭代以及何时执行
- 为什么$watchGroup称之为's回调两次
- Javascript:非阻塞回调(另一次)
- 角度jsonp回调只执行一次
- 在设置两个对象的动画时只触发一次回调
- 如何在一次AJAX调用后避免回调地狱
- jQuery动画在运行时触发回调两次
- jQuery动画触发.complete回调5次
- 执行jquery $.when()的done回调一次(在backbone-js应用中)