繁体   English   中英

我如何找到在哪里发起javascript事件?

[英]How can I find where a javascript event is initiated?

我有一个JS脚本,它创建了一个新的Node并将其插入HTML页面。 我正在处理DOM突变事件,并且可以捕获DOMNodeInserted事件。 在该函数中,我想找出源(即在HTML的哪一部分中调用了脚本函数)和目标(即在HTML页面中的哪一部分中添加了节点)。

我可以使用event.target找到目标,但是我找不到事件的来源。

例如,考虑以下伪代码HTML页面:

<html>
<head>
<script>
   function test() {
      //DOM access
      <div_object>.setAttribute("attr", "value");
   }
</script>
</head>
<body onload="test()">
   <div id="123">
   </div>
</body>
</html>

我希望我的源代码为BODY(因为该脚本已启动),目标应该为div(123)(因为该属性已添加到div_123。

我怎样才能做到这一点?

关于什么

<html>
<head>
<script>
   function test(element) {
      //DOM access
      element.setAttribute("attr", "value");
   }
</script>
</head>
<body onload="test(this)">
   <div id="123">
   </div>
</body>
</html>

有趣。 我在这里看过(回答是否格式化)

<html>
<head>
<script>
function test(e) {
  if (e) var event=e;
//DOM access
  var t="";
  for (o in event) t+='<br/>'+o+':'+event[o]
  document.getElementById('d123').innerHTML=t;
}
</script>
</head>
<body onload="test(event)">
   <div id="d123">
   </div>
</body>
</html>

抱歉,您无法找出导致事件触发的代码段,它们已完全分离。 您必须通过将其自身的this / event.target的值存储在变量中来使触发代码协同工作,以便以后触发的代码能够使用。

但是,如果您有这样的合作,则不需要DOM突变事件。

如果您有一个事件处理层(作为许多JS框架的一部分),则可以将this / target跟踪放在该层中,因此触发的代码可以询问“在我之前发生的最后一个事件是什么?”。

但是我不相信这是值得的。 通常最好添加您自己的在组件之间通信的合作挂钩。 您通常不能依赖DOM突变事件,因为它们不受全局和完全支持(或实际上在IE <9上完全不受支持)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM