Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 479|回复: 0

jquery给label绑定click事件被触发两次解决方案

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 793 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    723458
    发表于 2021-7-14 22:36:37 | 显示全部楼层 |阅读模式

    首先我们看下面的代码片段(label包裹checkbox

     

    <div class="example"><label for="chk_6" class="label-1">选项6<input class="chkbox-1" type="checkbox" id="chk_6" value="1"></label></div>
    <div class="example"><label for="chk_7" class="label-1">选项7<input class="chkbox-1" type="checkbox" id="chk_7" value="1"></label></div>
    <div class="example"><label for="chk_8" class="label-1">选项8<input class="chkbox-1" type="checkbox" id="chk_8" value="1"></label></div>
    <div class="example"><label for="chk_9" class="label-1">选项9<input class="chkbox-1" type="checkbox" id="chk_9" value="1"></label></div>
    <div class="example"><label for="chk_10" class="label-1">选项10<input class="chkbox-1" type="checkbox" id="chk_10" value="1"></label></div>

     

     

    // 绑定label的click事件
        $('.label-1').click(function (e) {
            console.log($(this).text());
        });

     

     

    点击文字,再观察控制台我们会发现一个现象!!(代码被执行两次)

     

     

    问题原因:

    点击label的时候,事件冒泡一次,同时会触发关联的input的click事件,导致事件再次冒泡

     

     解决方案一(修改html结构label和checkbox同级):

     

    <div class="example"><label for="chk_1" class="label-1">选项1</label><input class="chkbox-1" type="checkbox" id="chk_1" value="1"></div>
    <div class="example"><label for="chk_2" class="label-1">选项2</label><input class="chkbox-1" type="checkbox" id="chk_2" value="1"></div>
    <div class="example"><label for="chk_3" class="label-1">选项3</label><input class="chkbox-1" type="checkbox" id="chk_3" value="1"></div>
    <div class="example"><label for="chk_4" class="label-1">选项4</label><input class="chkbox-1" type="checkbox" id="chk_4" value="1"></div>
    <div class="example"><label for="chk_5" class="label-1">选项5</label><input class="chkbox-1" type="checkbox" id="chk_5" value="1"></div>

     

     

     

     刷新界面,点击文字,再观察控制台:

     

     

     

     

     OK正常了。

     

     

    解决方案二(修改js代码绑定checkbox的change事件):

        // 绑定checkbox的change事件
        $('.chkbox-1').change(function (e) {
            console.log($(this).parent().text());
        });

     

     

     刷新界面,点击文字,再观察控制台:

     

     

     

     

      OK正常了。

     

    解决方案三(判断事件来源,如果是input,则阻止):

    // 绑定label的click事件
        $('.label-1').click(function (e) {
            if ($(e.target).is("input"))
                return;
            console.log($(this).text());
        });

     

     

     

     

     

    解决方案四:

    不用label(最简单直接粗暴的方法)

     

     

     

    如果这篇文章对您有帮助,您可以打赏我

     

    技术交流QQ群:15129679

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-21 11:24 , Processed in 0.070655 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表