当用户点击页面或按下任意键时,我只需做一次。我通常会在jQuery中使用.one()函数来执行此操作,但是对于两个事件都会调用一次回调,而不是只调用一次:
$("html").one("click keydown", function() {
alert("event");
});
我无法调用$(this).unbind("click keydown")
,因为我不想取消绑定可能绑定到该元素的其他事件。
编辑: 我之前应该已经提到了这一点,但是绑定事件的代码被多次调用,并且我希望每次绑定时回调都运行一次。如果事件被绑定n次,我希望回调运行n次。
答案 0 :(得分:1)
你可以在事件处理程序之外创建你的函数:
var onClickAndKeydown = function(){
alert("event");
}
然后使用.on():
将处理程序添加到事件click和keydown到该函数$("html").on("click keydown", onClickAndKeydown);
当您需要时,可以使用.off()删除该函数的事件处理程序:
$("html").off("click keydown", onClickAndKeydown);
.off()
方法删除了附加.on()
的事件处理程序。如果在.off()
内为函数指定地址,那么将只删除该函数的处理程序,因此仍将处理其他函数的处理程序。
答案 1 :(得分:0)
尝试使用off()之类的,
$("html").on("click keydown", function(e) {
alert(e.type);
$(this).off("click keydown");
});
答案 2 :(得分:0)
使用命名空间事件名称
$("html").one("click.myonce keydown.myonce", function () {
console.log("event");
$(this).off('click.myonce keydown.myonce')
});
演示:Fiddle
答案 3 :(得分:0)
你也可以为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");
});