浅谈jquery点击label触发2次的问题


Posted in Javascript onJune 12, 2016

今天写问卷的时候遇到个label点击的时候,监听的click事件被执行两次;产生这个的原因么。。。事件冒泡

<div class="questionBox checkBox">
      <div class="title"> 2.你如何理解创新意识的重要性?</div>
      <div class="checkBoxList" data-more="2">
      <label>
       <input type="checkbox" />
       <span>创新意识是工作必须的</span></label>
      <label>
       <input type="checkbox" />
       <span>创新意识是工作必须的</span></label>
      <label>
       <input type="checkbox" />
       <span>创新意识是工作必须的</span></label>
      <label>
       <input type="checkbox" />
       <span>创新意识是工作必须的</span></label>
      <label>
       <input type="checkbox" />
       <span>创新意识是工作必须的</span></label>
       </div>
      <input type="text" class="text" placeholder="在此输入其它的意见" />
     </div>
$(".checkBoxList label").click(function(){
    var more = $(this).parent(".checkBoxList").attr("data-more");
    var length = $(this).parent(".checkBoxList").find("label").length;
    var NowCheck=0;
    for(i=0;i<length;i++){
      if ($(this).parent(".checkBoxList").find("label").eq(i).find("input").prop("checked")==true){
        pass="1"
        NowCheck = NowCheck+1
      }
    }
    if(NowCheck>more){
      alert("本题最多选取" + more + "个")  
    }
  })

然后么找了下方法。。。

方法一:把label扔了。。。

然后方法二

只认input,判断事件源为input(这是网上有人贴出来的解决方法)

/**
   * 是否包含某id的input后代元素
   * @param {Element} elm 要判断的元素
   * @param {String}  id 要匹配的id
   * @return {Boolean}
   */
  function hasInput(elm, id) {
    for (var i = 0, inputs = elm.getElementsByTagName("input"), len = inputs.length; i < len; i++) {
      if (inputs[i].id === id) {return true;}
    }
    return false;
  }
  /**
   * 判断某元素下的label是否有关联的input
   * @param {Element} elm  要判断的元素
   * @param {Element} label label元素
   * @return {Boolean}
   */
  function isLabelhasRelativeInput(elm, label) {
    if (label.getElementsByTagName("input").length) {
      return true;
    }
    var forT = label.getAttribute("for");
    var isIE6 = !-[1,] && !window.XMLHttpRequest;// IE6不支持for属性
    if (forT && hasInput(elm, forT) && !isIE6) {
      return true;
    }
    return false;
  }
  document.getElementById("test").onclick = function(e) {
    var ev = e || window.event;
    var srcElm = ev.target || ev.srcElement;
    if (srcElm.tagName === 'LABEL' && isLabelhasRelativeInput(this, srcElm)) {return;}
    // do something;
  }

。。。反正我是看的有点醉了

然后方法三。。。

通过事件触发的时间戳来判断,其实和事件冒泡有关的问题都可以通过该方法去处理。安全无公害

var evTimeStamp = 0;
  document.getElementById("test").onclick = function(e) {
    var now = +new Date();
    if (now - evTimeStamp < 100) {
      return;
    }
    evTimeStamp = now;
    console.log(2);
  }

好了讨论到最后。。。我还是吧label给扔了。。。HOHOHO

$(".checkBoxList label input").click(function(){
    var more = $(this).parents(".checkBoxList").attr("data-more");
    var length = $(this).parents(".checkBoxList").find("label").length;
    var NowCheck=0;
    for(i=0;i<length;i++){
      if ($(this).parents(".checkBoxList").find("label").eq(i).find("input").prop("checked")==true){
        pass="1"
        NowCheck = NowCheck+1
      }
    }
    if(NowCheck>more){
      alert("本题最多选取" + more + "个")  
    }
  })

以上这篇浅谈jquery点击label触发2次的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery.parseJSON(json)将JSON字符串转换成js对象
Jul 27 Javascript
javascript初学者常用技巧
Sep 02 Javascript
jquery.map()方法的使用详解
Jul 09 Javascript
浅谈Javascript数据属性与访问器属性
Jul 26 Javascript
webpack配置导致字体图标无法显示的解决方法
Mar 06 Javascript
JavaScript中filter的用法实例分析
Feb 27 Javascript
JavaScript中Dom操作实例详解
Jul 08 Javascript
TypeScript类型声明书写详解
Aug 28 Javascript
小程序最新获取用户昵称和头像的方法总结
Sep 23 Javascript
Vue使用v-viewer实现图片预览
Oct 21 Javascript
JavaScript实现弹出窗口效果
Dec 09 Javascript
vue实现可拖拽的dialog弹框
May 13 Vue.js
Bootstrap学习笔记之js组件(4)
Jun 12 #Javascript
JSP基于Bootstrap分页显示实例解析
Jun 12 #Javascript
JavaScript手机振动API
Jun 11 #Javascript
JavaScript地理位置信息API
Jun 11 #Javascript
jQuery自定义数值抽奖活动代码
Jun 11 #Javascript
浅谈JavaScript的全局变量与局部变量
Jun 10 #Javascript
javaScript知识点总结(必看篇)
Jun 10 #Javascript
You might like
php zend解密软件绿色版测试可用
2008/04/14 PHP
php 文本文件的读取效率
2012/02/10 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
心扬JS分页函数代码
2010/09/10 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
js中this对象用法分析
2018/01/05 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
JS实现打字游戏
2019/12/17 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
python使用正则表达式替换匹配成功的组
2017/11/17 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
微信公众号token验证失败解决方案
2019/07/22 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
计生专干事迹
2014/05/28 职场文书
公司员工活动策划方案
2014/08/20 职场文书
党校学习党性分析材料
2014/12/19 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
小学端午节活动总结
2015/02/11 职场文书
学习保证书100字
2015/02/26 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
Mysql数据库命令大全
2021/05/26 MySQL
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电