浅谈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获取html文件的思路及示例
Sep 17 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
Nov 03 Javascript
深入分析JSONP跨域的原理
Dec 10 Javascript
详细解密jsonp跨域请求
Apr 15 Javascript
漫谈JS引擎的运行机制 你应该知道什么
Jun 15 Javascript
Vue.js实战之利用vue-router实现跳转页面
Apr 01 Javascript
Vue2.x中的父子组件相互通信的实现方法
May 02 Javascript
JS中将多个逗号替换为一个逗号的实现代码
Jun 23 Javascript
vue init失败简单解决方法(终极版)
Dec 22 Javascript
详解Webpack + ES6 最新环境搭建与配置
Jun 04 Javascript
纯javascript实现选择框的全选与反选功能
Apr 08 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
May 22 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实现转换html格式为文本格式的方法
2016/05/16 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
JavaScript 学习初步 入门教程
2010/03/25 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
JavaScript如何实现组合列表框中元素移动效果
2016/03/01 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
2016/10/10 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
对Layer UI 模块化的用法详解
2019/09/26 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
推荐11个实用Python库
2015/01/23 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
pytorch中图像的数据格式实例
2020/02/11 Python
eharmony澳大利亚:网上约会服务
2020/02/29 全球购物
市场开发与营销专业求职信
2013/12/31 职场文书
求职信写作要突出重点
2014/01/01 职场文书
大学生村官事迹材料
2014/01/21 职场文书
课外活动总结范文
2014/07/09 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
2016年秋季趣味运动会开幕词
2016/03/04 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
JavaScript 定时器详情
2021/11/11 Javascript