zoukankan      html  css  js  c++  java
  • jquery给label绑定click事件被触发两次解决方案

    首先我们看下面的代码片段(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

  • 相关阅读:
    vue学习03 v-html
    [spring guides]网关入门
    记一次公司mssql server密码频繁被改的事件
    重构 maixpy 的 board_info + config.json 从而自适应硬件版型。
    介绍 MaixUI 系列(一)如何食用?
    (旧文)在 micropython / esp-at / arduino 中实现 软串口(software-serial) 的参考
    以优化 MaixPy 的启动速度为例,说说 K210 的双核使用及原子操作。
    我是如何在 Win + VSCode 上开发 Keil for GD32 实现 I2C 从机的游戏机手柄。
    为 MaixPy 加入软 SPI 接口(移植 MicroPython 的 SPI)
    为 MaixPy 加入软 I2C 接口(移植 MicroPython 的 I2C)
  • 原文地址:https://www.cnblogs.com/yeminglong/p/11697493.html
Copyright © 2011-2022 走看看