哪种是处理事件监听器最有效的方法?
Which is the most efficent way to handle eventListeners?
我写了下面的代码:
document.addEventListener('click', function (event) {
if(event.target.matches('#open-new-not') || event.target.matches('#close-not')){
opnNewNot();
}
if(event.target-matcheS('#hide-links')){
hideLinks();
}
if(...and so on...){}
});
这是一个好的解决方案吗?你能告诉我如何以最简单有效的方式处理几乎所有的事件监听器吗?
如果您绝对必须走这条路,那么我建议您使用 switch
语句而不是 if
的字符串。这样做的额外好处是不会中断您不想拦截的其他事件的处理。
document.addEventListener('click', function (event) {
switch (event.target.id) {
case 'open-new-not':
case 'close-not':
openNewNot();
break;
case 'hide-links':
hideLinks();
break;
// etc
}
});
如果我是你,我会认真考虑是否要捕获每个元素上的每个 click
事件,或者我是否可以只针对少数 select 元素而现实地逃脱.
由于您只匹配 ID,因此使用事件委托没有意义(除非元素是延迟加载的)。只需在元素本身上安装事件侦听器,不要在此处使用 if
/else
的大型链。事件委托只会使处理许多相似元素上的事件更加高效。
我写了下面的代码:
document.addEventListener('click', function (event) {
if(event.target.matches('#open-new-not') || event.target.matches('#close-not')){
opnNewNot();
}
if(event.target-matcheS('#hide-links')){
hideLinks();
}
if(...and so on...){}
});
这是一个好的解决方案吗?你能告诉我如何以最简单有效的方式处理几乎所有的事件监听器吗?
如果您绝对必须走这条路,那么我建议您使用 switch
语句而不是 if
的字符串。这样做的额外好处是不会中断您不想拦截的其他事件的处理。
document.addEventListener('click', function (event) {
switch (event.target.id) {
case 'open-new-not':
case 'close-not':
openNewNot();
break;
case 'hide-links':
hideLinks();
break;
// etc
}
});
如果我是你,我会认真考虑是否要捕获每个元素上的每个 click
事件,或者我是否可以只针对少数 select 元素而现实地逃脱.
由于您只匹配 ID,因此使用事件委托没有意义(除非元素是延迟加载的)。只需在元素本身上安装事件侦听器,不要在此处使用 if
/else
的大型链。事件委托只会使处理许多相似元素上的事件更加高效。