[英]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()
為函數指定地址,則將僅刪除該函數的處理程序,因此仍將處理其他函數的處理程序。
使用命名空間的事件名稱
$("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.