如何在jQuery中只触发一次多个事件的回调

时间:2013-11-19 12:45:40

标签: javascript jquery events

当用户点击页面或按下任意键时,我只需做一次。我通常会在jQuery中使用.one()函数来执行此操作,但是对于两个事件都会调用一次回调,而不是只调用一次:

$("html").one("click keydown", function() {
   alert("event");
});

我无法调用$(this).unbind("click keydown"),因为我不想取消绑定可能绑定到该元素的其他事件。

编辑: 我之前应该已经提到了这一点,但是绑定事件的代码被多次调用,并且我希望每次绑定时回调都运行一次。如果事件被绑定n次,我希望回调运行n次。

4 个答案:

答案 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");
});

Demo

答案 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");
});