浅谈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 相关文章推荐
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 Javascript
详解Bootstrap插件
Apr 25 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
Nov 09 Javascript
JS 调试中常见的报错问题解决方法
May 20 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
Jul 22 Javascript
Vue动态加载异步组件的方法
Nov 21 Javascript
d3绘制基本的柱形图的实现代码
Dec 12 Javascript
浅谈Javascript中的对象和继承
Apr 19 Javascript
Vue中的组件及路由使用实例代码详解
May 22 Javascript
node静态服务器实现静态读取文件或文件夹
Dec 03 Javascript
微信小程序实现可长按移动控件
Nov 01 Javascript
前端实现滑动按钮AJAX与后端交互的示例代码
Feb 24 Javascript
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
东方红 - 来复式再生机的修复
2021/03/02 无线电
PHPUnit PHP测试框架安装方法
2011/03/23 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
php常用字符串处理函数实例分析
2014/11/22 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
js null,undefined,字符串小结
2010/08/21 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
VUE中的无限循环代码解析
2017/09/22 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
微信小程序实现评论功能
2018/11/28 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
Python读取word文本操作详解
2018/01/22 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
市场营销专业推荐信
2013/11/03 职场文书
问卷调查计划书
2014/01/10 职场文书
给同事的道歉信
2014/01/11 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
四十九个javascript小知识实用技巧
2021/11/20 Javascript