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

布兰登

我有一个函数,当单击一个元素时,该函数只是在两种颜色之间切换,我在父元素和子元素上使用了相同的功能,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>
Shubham Gupta

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用输入元素上的修饰键触发点击事件

如何使用父元素阻止子元素上的点击事件

使用JQuery将元素悬停在元素上x秒时,如何触发点击?

在事件上使用jQuery获取点击的元素?

为什么在我的页面加载后不使用 jquery 添加此输入触发 keyup 事件?

为什么不使用变量的点击事件

为什么点击事件在返回时被触发?

为什么在使用 FlexBox 时子元素会卡住

单击其子级之一时,未在IE11中使用display flex的可聚焦父HTML元素上触发焦点事件

在使用jQuery Mobile的iOS和Android中,单击事件未在标签的子元素上触发

为什么使用javascript href单击锚点元素时IE10会触发beforeunload事件,以及如何阻止它

如何使用jQuery在Angular 5上触发点击事件

使用rxjs时,为什么switchMap不会触发完成事件?

当我使用val()设置select的值时,为什么jquery change事件没有触发?

点击事件未使用ON触发?

在 textarea 上使用 append 时,jQuery 会触发什么事件?

仅使用prop(“ tagName”)获得父标记名称,而不获得点击事件的子标记。为什么?

mysql-为什么在WHERE子句上使用此子查询?

与后代选择器绑定时,为什么在子元素之前的父元素上触发事件?

e.target.id不会触发对位于container.children [i] .onclick内的元素的点击

在angular中使用指令时,将事件附加到子元素的最佳方法是什么

为什么使用中间点击暂停间隔事件滚动?

为什么在此反应代码中使用div释放外部div时,不触发mouseup事件(使用window.addEventListener)

使用ngIf元素可见时触发事件

用户滚动到特定元素时触发事件-使用jQuery

使用<use>元素时,SVG单击事件未触发/冒泡

为什么在使用此功能拖动一个元素时两个元素都移动?

如何在 React 中使用 e.target 使用 EventListener 记录元素而不是其子元素

使用点击事件查找元素