我正在编写一个 jQuery 插件并遇到了一个有趣的问题,我想将插件中的事件绑定到 body 并委托给特定的子元素。
这没问题,但是该插件是为支持同一页面上的多个实例而构建的,这导致事件被触发的次数与该插件在页面上存在的次数相同。(已经绑定了很多次了)
除了附加到窗口的布尔标志之外,是否只能从插件代码中绑定一次?
我可以通过在插件代码之外绑定来解决这个问题,因此它只绑定一次,或者确保定时器只设置一次,但是我不想让事件被触发 20 次。如果有其他方法,我正在寻找更多..
可能的解决方案
if (!window.tip.hoverIntent || window.tip.hoverIntent === undefined) {
//bind handler..
window.tip.hoverIntent = true;
}
事件处理程序
$('body').on({
mouseenter: function() {
clearTimeout(window.tip.timerID);
},
mouseleave: function() {
window.tip.timerID = setTimeout(function() {
$('.tip-shown').remove();
}, 250);
}
}, '.tip-shown');