如何在循环中注册“on”事件:
evetns = [
"click"
"mouseover"
...
]
for(events...) {
$(document).on(events[i], 'someTarget', function() {...});
}
最佳答案
我的答案是不要在 for 循环中注册事件。
on()
函数将事件委托(delegate)给同一个对象,因此不需要这种欺骗。您可以做的是使用 events.join(' ')
。
这样,$(document)
对象获取字符串中由单个空格分隔的所有事件,结果是:
$(document).on('click mouseover ...', function(){/**/});
现在优化这个的技巧是使用一个 eventHandler 将特定函数映射到单独的事件。
$(document).on(events.join(' '), myEventHandler);
function myEventHandler(e){
switch (e.type){
case 'click': return myClickFn(e);
case 'mouseover': return myOverFn(e);
default: return false;
}
}
这样所有功能都可以单独保存在浏览器的内存中。
想象一下,如果没有 switch 语句,您可以实现所有事件在事件发生的同时触发同一个函数。但是,如果这是您所需要的,我建议使用 throttle or debounce处理这个用例。
关于javascript - jQuery 在循环中注册事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39238886/