有关label点击两次的问题

项目过程中发现一个关于JS好玩儿的事情,一个是点击事件,会发生两次

这个问题并不影响项目的呈现效果,但是问题记下了,项目上线之后,就此问题,又做一次详细的了解.

通过删减代码,找到发生此问题的代码.

<div class="item">
  <div class="radio">
    <label class="labela" for="a"><input id="a" type="radio" value="">我是单选按钮</label>
  </div>
</div>
复制代码

我把click事件绑定在item上,然后发现触发了两次,这让我感觉不可思议.也感觉有点莫名其妙.why,why,why 难道是我添加方式不对?然后我换了个姿势重新添加,添加在radio这个div上然而还是这样,不理解还是不理解.

没办法,就将这些节点上全部都添加上click然后console.log一遍,打印的结果是:

我是label > 我是item > 我是radio > 我是input > 我是label > 我是item > 我是radio

嗯 ? what is fu** 这是什么?

如果是先捕获,后冒泡也应该是:

我是item > 我是radio > 我是label > 我是input > 我是label > 我是radio > 我是item

完全不是,这应该怎么理解?

本来想在w3c上面找点线索,发现并没有(也可能是我找的姿势不对,反正没找到),不过找到了一位同仁的一篇博客,然后我就吧input放到label的外面,然后又试了一次,打印的结果是这样的:

我是label > 我是radio > 我是item > 我是input > 我是radio > 我是item

真相慢慢露出水面了.

断开来看 我是label > 我是radio > 我是item我是input > 我是radio > 我是item

原来先是触发 label 由于label的for关联input的id如果你对这句话有疑问,那么传送门 然后触发input 分别进行事件冒泡,这样就解释通了.

如果input放在label中的话,input上的冒泡就会多一个我是label 分开来看就是这样:

我是label > 我是item > 我是radio我是input > 我是label > 我是item > 我是radio

强势解释一波.

转载于:https://juejin.im/post/5b349e57f265da59961bdac9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值