作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一些方法来向元素添加和删除唯一的、命名的事件,这样我就可以确保事件永远不会被添加超过一次。当您将事件添加到一个元素时,它们会相互堆叠,即使其中两个是同一个事件。对于一个简单但抽象的示例:
$('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
我的问题有两个:
最佳答案
查看命名空间事件: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/
我想要一些方法来向元素添加和删除唯一的、命名的事件,这样我就可以确保事件永远不会被添加超过一次。当您将事件添加到一个元素时,它们会相互堆叠,即使其中两个是同一个事件。对于一个简单但抽象的示例: $('
我是一名优秀的程序员,十分优秀!