JavaScript事件监听引起的事件覆盖

       最近写了一个轮播图小案例,因为JS结构问题产生了一个小bug,虽然最后解决了但还是想了解一下这个bug是怎么产生的,即事件监听的嵌套引起的事件覆盖。

1.关于bug的产生与描述:

首先我自己重新写了一下这段代码

<div>
        <button>点击</button>
    </div>
    <script>
        var n = 0;
        var div = document.querySelector('div')
        var btns = document.querySelectorAll('button')
        div.addEventListener('mouseover',function() {
            btns[0].addEventListener('click',function() {
                console.log(n++);
            })
        })
    </script>

可以看到,我们将两个事件监听嵌套在了一起,然后运行这段代码后,用逻辑来描述应该是每点击一次按钮控制台输出n + 1的结果。

(这次输出是点击四次的效果)

 当我们第一次(即没有触发mouseover时)移入盒子时点击, 它输出是正确的输出,但是一但触发了mouseover(或者其它事件)时,则会使每次点击都会产生输出事件触发次数倍数的数字。

(这次输出是点击一次的效果)

2.bug的解决:

所以bug就产生了,这个bug与事件监听没有事件覆盖有关系(特费解),当我们把事件监听换成传统事件时,这个bug就没有了。

<script>
        var n = 0;
        var div = document.querySelector('div')
        var btns = document.querySelectorAll('button')
        div.addEventListener('mouseover',function() {
            btns[0].onclick = function(){
                console.log(n++);
            }
        })
    </script>

即每次点击只会自加一次。有大佬知道这个bug具体原理吗,欢迎在评论区留言(救救孩子)~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值