2011-03-20 105 views
9

我想添加一個事件,如onclick或mouseover到一個動態創建的元素(類似於jQuery中的.live函數)......我如何在沒有框架的情況下使用純JavaScript如jQuery?這裏是一個簡單的jsFiddle http://jsfiddle.net/3tBpv/1/在動態元素上點擊事件沒有jQuery

我想能夠做到這一點從新創建的div類而不是一個id。

任何幫助,將不勝感激

回答

23

創建文檔對象上一個處理程序。檢查目標元素的類和節點名稱(標記)。如果它們匹配,繼續執行任何需要的操作,否則忽略點擊。

document.onclick = function(event) { 
    var el = event.target; 
    if (el.className == "new" && el.nodeName == "DIV") { 
     alert("div.new clicked"); 
    } 
}; 

這是fiddle

+0

jQuery的「live」方法甚至可以用這種方式進行收聽,upvote! – ctcherry 2011-03-21 00:08:28

+0

非常好,這正是我正在尋找...不知道爲什麼我沒有想到這一點。謝謝! – Tony 2011-03-21 00:13:09

+0

+1明顯更好=) – kjy112 2011-03-21 00:13:48

3

@Anurag's answer是正確的,但不完整,在大多數情況下會導致大量的集成bug。

這裏是正確的版本:

document.addEventListener("click", function(event) 
{ 
    // retrieve an event if it was called manually 
    event = event || window.event; 

    // retrieve the related element 
    var el = event.target || event.srcElement; 

    // for all A tags do the following 
    if (el instanceof HTMLAnchorElement) 
    { 
     //required to make the "return false" to affect 
     event.preventDefault(); 

     window.location.href = "/click.php?href="+encodeURIComponent(el.href); 

     //prevent user's click action 
     return false; 
    } 
}, true); 

這是一個基本的點擊追蹤功能會影響頁面上的所有鏈接跟蹤/記錄的所有鏈接的點擊次數。

+2

這裏的'return false'實際上並沒有做任何事 - 這是一個jQuery發明,爲你調用event.preventDefault。請參閱http://stackoverflow.com/a/1357151/589391。 – gsf 2014-07-28 22:01:51