在每个子元素中使用event.stopPropagation()是否很好?

时间:2016-09-09 19:37:52

标签: javascript

我最近偶然发现了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");
    })
})

0 个答案:

没有答案