绑定点击事件,当点击事件里依赖异步返回结果则阻止冒泡失效

更新日期: 2020-11-30 阅读: 3.3k 标签: 点击

背景

在开发过程中,明明调试好的阻止冒泡没有问题,但是真正使用 时候发现阻止冒泡失效了,原来原因是点击事件里依赖了异步返回结果。


正常阻止冒泡写法

<div class="aa notice">
    <div class="bb notice"></div>
</div>
<script>
    var arr = document.getElementsByClassName("notice");
    for(let i of arr){
        i.addEventListener("click",function (e) {
            console.log("i",i)
            // 阻止冒泡
            const ev = e || window.event;
            if (ev && ev.stopPropagation) {
                //非IE浏览器
                ev.stopPropagation();
            } else {
                //IE浏览器(IE11以下)
                ev.cancelBubble = true;
            }
        })
    }
</script>

阻止冒泡失效的场景:

<div class="aa notice">
    <div class="bb notice"></div>
</div>
<script>
    var arr = document.getElementsByClassName("notice");
    for(let i of arr){
        i.addEventListener("click",function (e) {
            console.log("i",i)
            doReport(reportList, timeout).then(() => {
                // 阻止冒泡
                const ev = e || window.event;
                if (ev && ev.stopPropagation) {
                   //非IE浏览器
                   ev.stopPropagation();
                } else {
                   //IE浏览器(IE11以下)
                   ev.cancelBubble = true;
                }
            })
        })
    }
</script>

doReport是一个上报方法,这里要等待上报完成之后再执行点击逻辑,会导致阻止冒泡失效。


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/9912

javascript怎么设置按钮不可点击?

JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,下面我们来看一下JavaScript如何设置按钮不可点击。

css如何设置不可点击?

通过设置元素的pointer-events属性设置为none,来实现元素不可点击。此方法是通过设置元素的鼠标事件失效来实现元素不可点击。

pointer-events: none;解决点击失效问题

工作中,做了一个dropdown。在form-select::after里加了一个向下箭头的背景,可是点击箭头时,无法触发dropdown事件

优雅解决按钮”重复点击“问题

这个问题怎么解决呢?简单点,使用一个lock标记,在请求发出时上锁,上锁后就不可以再发请求,可以在请求结束后解锁:

如何实现动态添加的元素添加点击事件

在页面开发过程中常常遇到需要动态添加元素,然后给这一元素绑定相关事件的情况,这种情况下一般需要给元素加上相关属性,然后写这些元素的事件函数即可。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!