浅谈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对象之内置对象Math使用方法
Apr 16 Javascript
Node调试工具JSHint的安装及配置教程
May 27 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
Sep 10 Javascript
node.js中的fs.renameSync方法使用说明
Dec 16 Javascript
jquery简单实现网页层的展开与收缩效果
Aug 07 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
Feb 15 Javascript
JavaScript字符串检索字符的方法
Jun 23 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
Feb 08 Javascript
vue 1.0 结合animate.css定义动画效果
Jul 11 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
Sep 25 Javascript
js判断非127开头的IP地址的实例代码
Jan 05 Javascript
js实现旋转木马轮播图效果
Jan 10 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
php 变量定义方法
2009/06/14 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
javascript XML数据显示为HTML一例
2008/12/23 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
Python 错误和异常代码详解
2018/01/29 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
模具专业自荐信
2014/05/29 职场文书
2014年施工员工作总结
2014/11/18 职场文书
学生个人总结范文
2015/02/15 职场文书
欠款起诉书范文
2015/05/19 职场文书
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python
python使用BeautifulSoup 解析HTML
2022/04/24 Python