【发布时间】:2018-04-25 16:50:27
【问题描述】:
var domInner = document.querySelector('#inner')
var domWrapper = document.querySelector('#wrapper')
domInner.onclick = innerHandler
function innerHandler () {
console.log('inner')
}
domWrapper.onclick = wrapperHandler
function wrapperHandler () {
// setTimeout(() => {
console.log('wrapper')
domInner.click()
// }, 1000)
}
domInner.click()
<div id="wrapper">
wrapper
<div id="inner">
inner
</div>
</div>
我们可以看到,函数wrapperHandler中的domInner.click()并没有触发domInner的点击事件。
我以前以为会,domInner的点击事件会传播到domWrapper,所以这可能会导致死循环。
但它没有。那么,究竟是什么原因呢?
在我打开setTimeout之后,它就会发生。
为什么函数wrapperHandler中的domInner.click()没有再次触发domInner的点击事件?为什么该事件没有导致死循环?
谢谢。
【问题讨论】:
标签: javascript dom-events event-bubbling event-propagation