2012-12-28 55 views
5

有谁知道如何在元素添加到DOM后触发JavaScript中的事件?添加到DOM触发Javascript事件

的总体思路是这样的:

var elem = document.createElement('div'); 
elem.addEventListener('ON_ADD_TO_BODY', function(){console.log(elem.parentNode)}); 
//... LATER ON ... 
parentElemInBody.appendChild(elem); // <- Event is triggered here after append 

有,直到你的元素添加到DOM所以它才有意义推迟执行,直到加入的元素是不应该被触发某些功能。

有没有办法做到这一点,而不需要明确地打电话给他们,或者我应该做一些破解,包括setTimeout和一个检查,看看元素是否已经添加到DOM呢?

回答

7

使用DOMNodeInserted突变事件。

文档浏览:https://developer.mozilla.org/en-US/docs/DOM/Mutation_events

用法示例在上面给出页:

element.addEventListener("DOMNodeInserted", function (ev) { 
    // ... 
}, false); 

注:2016年4月17日

突变事件被弃用的现在。现在推荐的方法是Mutation Observers

+0

我不知道那些甚至存在!我确实需要支持IE9-尽管:(并且那些关于性能命中的评论并不是很令人放心,我知道我没有在问题中指定这个答案,所以你的答案是正确的,但是我需要考虑所有这些。是否有混合的方法,至少支持IE9? – sgcharlie

+0

对于不支持上述操作的浏览器,您可能需要推出一个定时器,定期检查父元素的子元素并触发一些回调。 – techfoobar

+1

突变事件现在不推荐使用,请考虑使用[Mutation Observers](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver)代替 – ZitRo