浅谈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 相关文章推荐
js中document.getElementByid、document.all和document.layers区分介绍
Dec 08 Javascript
JavaScript 高级篇之函数 (四)
Apr 07 Javascript
jQuery 数据缓存模块进化史详细介绍
Nov 19 Javascript
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
Apr 23 Javascript
js中自定义方法实现停留几秒sleep
Jul 11 Javascript
Jq通过td获取同行其它列td的方法
Oct 05 Javascript
vue的toast弹窗组件实例详解
May 14 Javascript
angularjs性能优化的方法
Sep 05 Javascript
JS实现的全选、全不选及反选功能【案例】
Feb 19 Javascript
vue基础之事件v-onclick=&quot;函数&quot;用法示例
Mar 11 Javascript
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
js实现自动锁屏功能
Jun 02 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/09/30 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
对联广告js flash激活
2006/10/19 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
python用字典统计单词或汉字词个数示例
2014/04/22 Python
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
python实现滑雪者小游戏
2020/02/22 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
我的求职计划书
2014/01/10 职场文书
《问银河》教学反思
2014/02/19 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
行政求职信
2014/07/04 职场文书
市场营销毕业求职信
2014/08/07 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书