如何将事件附加到DOM的所有节点?

时间:2017-06-22 16:16:12

标签: javascript dom nodes addeventlistener

我只是尝试将所有节点附加到click事件。但我无法理解如何在onload时添加它们。我只是想弄清楚从点击的地方到根节点的节点列表的完整路径。这是我的代码,我无法识别传递给addEvent()参数的内容。

    function addEvent(node){  // i used this function in onload event
        if(node == null) return;
        node.onclick = catchClickedItem;
        for(var i = 0; i < node.childNodes.length; i++){
            addEvent(node.childNodes[i]);
        }
    }

    function catchClickedItem(e){
        alert(e.target);    
    }

我尝试添加addEvent:

window.onload = addEvent

我遇到了这个错误

Uncaught TypeError: Cannot read property 'length' of undefined

1 个答案:

答案 0 :(得分:1)

为每个节点添加一个事件监听器是个坏主意。代替。也可以使用addEventListener代替onclick

&#13;
&#13;
document.addEventListener("click", function(e) {
  alert(e.target.innerHTML);
  e.stopPropagation();
});
&#13;
<div>
  <div>hello</div>
  <div>
    <div>world</div>
    <div>
      <div>foo</div>
    </div>
  </div>
</div>
&#13;
&#13;
&#13;