簡體   English   中英

如何在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()將事件處理程序添加到事件單擊並按下該函數:

$("html").on("click keydown", onClickAndKeydown);

並且在需要時,可以使用.off()刪除該函數的事件處理程序:

$("html").off("click keydown", onClickAndKeydown);

.off()方法刪除與.on()事件處理程序。 如果您在.off()為函數指定地址,則將僅刪除該函數的處理程序,因此仍將處理其他函數的處理程序。

嘗試像這樣使用off()

$("html").on("click keydown", function(e) {
   alert(e.type);
   $(this).off("click keydown");
});

演示

使用命名空間的事件名稱

$("html").one("click.myonce keydown.myonce", function () {
    console.log("event");
    $(this).off('click.myonce keydown.myonce')
});

演示: 小提琴

您也可以為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");
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM