2017-06-22 33 views
-2

我只是嘗試將所有節點附加到單擊事件。但我不明白如何在onload時添加它們。
我只是試圖找出從點擊的地方到根節點的節點列表的完整路徑。這裏是我的代碼,我無法確定要傳遞的addEvent()參數。如何將一個事件附加到DOM的所有節點上?

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 
+0

你能證明你怎麼罵你的'的addEvent()'函數? –

+2

'childNodes'也包含'Text'和註釋節點。你真的想要這個嗎?另外,「這不起作用」不是問題描述。 – Xufox

+3

尋求調試幫助的問題(「**爲什麼不是這個代碼工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身**中重現**所需的最短代碼。沒有**明確問題陳述**的問題對其他讀者無用。請參閱:[如何創建最小,完整和可驗證示例](https://stackoverflow.com/help/mcve)。 –

回答

1

添加事件偵聽器的每一個節點是一個壞主意。代替。而不是使用addEventListener而不是onclick

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

相關問題