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

  • A+
所属分类:Web前端
摘要

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

背景

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

正常阻止冒泡写法

<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是一个上报方法,这里要等待上报完成之后再执行点击逻辑,会导致阻止冒泡失效。