我最近偶然发现了Javascript的event.stopPropagation()方法,当我说绊倒时我的意思是这样,并且想知道它是否适合在任何时候使用。例如,如果我有一个具有点击处理程序的父元素
<div id="parent"></div>
var parentElm = document.getElementById("parent");
parentElm.addEventListener("click", function(ev){
console.log("Hello parent");
})
还有一个也有点击处理程序的子元素
<div id="parent"><div id="child"></div></div>
var parentElm = document.getElementById("parent");
var childElm = parentElm.getElementById("child");
parentElm.addEventListener("click", function(ev){
console.log("Hello parent");
})
childElm.addEventListener("click", function(ev){
console.log("Hello child");
})
根据我的理解和我所看到的情况,将显示两个控制台日志消息,因为您实际上是在点击这两个元素。那么总是在子元素的开头调用event.stopPropagation()是一种好习惯吗?虽然嵌套点击处理程序并不好,但是下面的内容不会达到同样的效果吗?
<div id="parent"><div id="child"></div></div>
var parentElm = document.getElementById("parent");
var childElm = parentElm.getElementById("child");
parentElm.addEventListener("click", function(parentEvent){
console.log("Hello parent");
childElm.addEventListener("click", function(childEvent){
parentEvent.preventDefault();
console.log("Hello child");
})
})