gpt4 book ai didi

javascript - 添加和删​​除唯一的 jQuery 事件(onUnique/offUnique?)

转载 作者:行者123 更新时间:2023-11-30 10:36:09 26 4
gpt4 key购买 nike

我想要一些方法来向元素添加和删除唯一的、命名的事件,这样我就可以确保事件永远不会被添加超过一次。当您将事件添加到一个元素时,它们会相互堆叠,即使其中两个是同一个事件。对于一个简单但抽象的示例:

$('a').on("click", function(e){ console.log("Hi One"); }); // 1
$('a').on("click", function(e){ console.log("Hi One"); }); // duplicate
$('a').on("click", function(e){ console.log("Hi Two"); }); // 2
// Output will be: Hi One, Hi One, Hi Two

我尝试使用类似 .off().on() 的方法,但一次只允许一个事件。

$('a').off("click").on("click", function(e){ console.log("Hi One"); }); 
$('a').off("click").on("click", function(e){ console.log("Hi One"); });
$('a').off("click").on("click", function(e){ console.log("Hi Two"); });
// Output will be: Hi Two

所以我想出了这个 jQuery 扩展:

$.fn.onUnique = function (
/* uniqueEventName, events [,selector] [,data], handler(eventObject) */
) {
var uniqueEventNameArray = this.data("uniqueEvents") || [];
var uniqueEventName = arguments[0];
if ($.inArray(uniqueEventName, uniqueEventNameArray) == -1) {
uniqueEventNameArray.push(uniqueEventName);
this.data("uniqueEvents", uniqueEventNameArray);
this.on(arguments[1], arguments[2], arguments[3], arguments[4]);
}
};

所以我可以得到我想要的效果...

$('a').onUnique("Hi1", "click", function(e){ console.log("Hi One"); }); 
$('a').onUnique("Hi1", "click", function(e){ console.log("Hi One"); });
$('a').onUnique("Hi2", "click", function(e){ console.log("Hi Two"); });
// Output will be: Hi One, Hi Two

我的问题有两个:

  1. 有更好的方法吗?
  2. 我如何执行与 .offUnique() 等效的操作,它只会删除指定的事件(按名称)?

最佳答案

查看命名空间事件:event.namespace

$('a').off('click.hi1').on('click.hi1', function(e){ console.log("Hi One"); });
$('a').off('click.hi1').on('click.hi1', function(e){ console.log("Hi One"); });
$('a').off('click.hi2').on('click.hi2', function(e){ console.log("Hi Two"); });

演示 http://jsfiddle.net/gaby/378rP/


不过,您可能应该尝试更好地组织您的代码,这样您就不会两次应用相同的事件..

关于javascript - 添加和删​​除唯一的 jQuery 事件(onUnique/offUnique?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13924439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com