使用e.target时,为什么此点击事件在子元素上触发?

时间:2018-09-21 22:56:12

标签: javascript events event-propagation

我有一个函数,当单击一个元素时,它会在两种颜色之间简单地变化;我在父元素和子元素上使用了相同的功能,click事件在父元素上起作用,但在子元素上却没有预期-为什么?

    <div class="parent red">
        <div class="child blue"></div>
    </div>
    <script scr="text/javascript" defer>
        let parent=document.getElementsByClassName("parent")[0];
        let child= document.getElementsByClassName("child")[0];

        function toggleColor(e){
            let background= e.target.classList;
            console.log(e.target);
            console.log("event fired")
            if(background.contains("blue")){
                e.target.classList.remove("blue");
                e.target.classList.add("red");
                console.log("event fired")
            }
            else if(background.contains("red")){
                e.target.classList.remove("red");
                e.target.classList.add("blue");
                console.log("event fired")
            }
        }



        parent.addEventListener("click",toggleColor,false);
        child.addEventListener("click", toggleColor,false);
    </script>

1 个答案:

答案 0 :(得分:1)

我认为这是由于事件传播而发生的。当您单击子元素时,将触发子元素的单击处理程序,然后触发父元素的单击处理程序,这将导致您的情况发生意外行为。

将e.stopPropagation()添加到您的toggleColor函数中,一切将按预期工作。