Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript事件委派中使用循环_Javascript_Jquery_Event Handling_Dom Events_Event Delegation - Fatal编程技术网

在Javascript事件委派中使用循环

在Javascript事件委派中使用循环,javascript,jquery,event-handling,dom-events,event-delegation,Javascript,Jquery,Event Handling,Dom Events,Event Delegation,我有以下代码: var page = document.getElementById("contentWrapper"); page.addEventListener("click", function (e) { var target, clickTarget, propagationFlag; target = e.target || e.srcElement; while (target !== page) {

我有以下代码:

var page = document.getElementById("contentWrapper");
page.addEventListener("click", function (e) {
   var target, clickTarget, propagationFlag;      
   target = e.target || e.srcElement;
   while (target !== page) {
      clickTarget = target.getAttribute("data-clickTarget");
      if (clickTarget) {
          clickHandler[clickTarget](e);
          propagationFlag = target.getAttribute("data-propagationFlag");
      }
      if (propagationFlag === "true") {
          break;
      }
      target = target.parentNode;
   }
});
我在整个项目(单页应用程序)中使用单个事件处理程序。使用属性“data clickTarget”标识事件处理程序,并使用“data propagationFlag”防止事件传播


如果DOM树很大,我应该使用循环方法还是传统的事件处理程序?

如果文档很大,并且所选元素远离触发事件的元素,委托的事件处理程序可能会很慢。。。从JQuery文档:

在文档顶部附近附加许多委托事件处理程序 树可能会降低性能。每次事件发生时,jQuery都必须 将该类型的所有附加事件的所有选择器与 从事件目标到事件顶部的路径中的元素 文件。为获得最佳性能,请在文档中附加委派事件 尽可能靠近目标元素的位置。避免过度 使用document或document.body处理大型服务器上的委托事件 文件

正如文档中所说,对于“点击”事件,这可能不是一个严重的问题(因为用户不会疯狂地点击页面),但对于鼠标移动或滚动等事件,响应速度慢可能会变得非常烦人


委托处理程序的特殊特性是,即使是后来添加到DOM中的新元素也会使用该处理程序,但您真的需要它吗?如果您不是在编写库,而是在编写应用程序,那么您可以控制添加新元素的时间,从而可以将偶数处理程序附件分解到元素创建中(换句话说,与其使用只创建新元素的函数,不如使其创建元素并自动注册标准事件处理程序).

如果dom树很大,不要用jQ来衡量它。@Dude这是一个荒谬的说法。它对OP没有帮助。你使用的是jQuery,那么为什么你要使编码如此复杂。使用
这个
关键字和
数据()
@Tomalak为什么?我提供的建议对OP和任何看到它的人都有好处,我应该停止吗?@Dude我认为这句话过于宽泛和简单。我缺少了一点证据/反思。还有其他更简单/有效的方法来实现事件委派吗?