javascript - jQuery 在循环中注册事件

标签 javascript jquery

如何在循环中注册“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/

相关文章:

javascript - Kyle Simpson asyncify 函数来自你不知道的 JS : Async & Performance

javascript - 如何使用 $.ajax 发送 JSON 而不是查询字符串?

javascript - 检查类按钮,如果它有某个类,则创建一个 'done' div

javascript - 尝试在 javascript 中应用 CSS 转换

javascript - 使用 changedetection OnPush 进行图像预览

javascript - WebGLRenderingContext.texImage2D 未实现接口(interface) ArrayBufferViewOrNull

javascript - 如何在javascript中选择相对于 'this'的元素

html - jQuery - 用 DIV 跟随光标

c# - 如何将文本框绑定(bind)到日期时间字段但仅显示其日期部分(在 ASP.MVC 中)?

javascript - 谷歌地图 : Display custom marker multiple times on wide map