2011-03-20 77 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