js事件委托和事件代理案例分享


Posted in Javascript onJuly 25, 2017

什么是事件委托/事件代理

利用事件的冒泡传播机制(触发当前元素的某一个行为,它父级所有元素的相关行为都会被触发),如果一个容器中有很多元素都要绑定点击事件,我们没有必要一个个的绑定了,只需要给最外层容器绑定一个点击事件即可,在这个方法执行的时候,通过事件源的区分来进行不同的操作。

具体小案例如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    *{
      margin:0;
      padding:0;
      font-size:14px;
    }
    html,body{
      width:100%;
      height:100%;
      overflow:hidden;
    }
    #box{
      position:absolute;
      left:50%;
      top:50px;
      width:100px;
      height:30px;
      margin-left:-50px;
      line-height:30px;
      text-align:center;
      border:1px solid #2489cc;
    }
    #mark{
      position:absolute;
      top:30px;
      left:-1px;
      width:300px;
      height:100px;
      line-height:100px;
      text-align:center;
      background:#ffe470;
      border:1px solid #2489cc;
    }
  </style>
</head>
<body>
  <div id='box'>
    <span>购物车</span>
    <div id="mark" style='display:none'>  
      查看购物车的详细信息
    </div>
  </div>

  <script> 
    var mark = document.getElementById('mark');
    document.body.onclick = function(e){
      e = e || window.event;
      e.target = e.target || e.srcElement;

      //如果点击的是box或者是#box下的span,我们判断mark是否显示,显示让其隐藏,反之让其显示
      if(e.target.id==="box" || (e.target.tagName.toLowerCase()==="span" && e.target.parentNode.id==='box')){
        if(mark.style.display === "none"){
          mark.style.display === "block"
        }else{
          mark.style.display === "none"
        }
        return;
      }
      //如果事件源是#mark,不进行任何的操作
      if(e.target.id==="mark"){
        return;
      }
      mark.style.display === "none"
    }
  </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js下判断 iframe 是否加载完成的完美方法
Oct 26 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
Apr 02 Javascript
SyntaxHighlighter 3.0.83使用笔记
Jan 26 Javascript
jQuery操作JSON的CRUD用法实例
Feb 25 Javascript
javascript学习指南之回调问题
Apr 23 Javascript
使用递归遍历对象获得value值的实现方法
Jun 14 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
Aug 27 Javascript
基于Vuejs框架实现翻页组件
Jun 29 Javascript
微信小程序 登陆流程详细介绍
Jan 17 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
Jan 18 Javascript
巧妙运用v-model实现父子组件传值的方法示例
Apr 07 Javascript
如何在 Vue 中使用 JSX
Feb 14 Vue.js
基于JavaScript实现多级菜单效果
Jul 25 #Javascript
简单谈谈React中的路由系统
Jul 25 #Javascript
老生常谈js中的MVC
Jul 25 #Javascript
教你5分钟学会用requirejs(必看篇)
Jul 25 #Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
Jul 25 #Javascript
Vue项目中引入外部文件的方法(css、js、less)
Jul 24 #Javascript
基于JavaScript实现百度搜索框效果
Jun 28 #Javascript
You might like
php str_pad 函数用法简介
2009/07/11 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
PHP线程的内存回收问题
2016/07/08 PHP
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
js对象数组按属性快速排序
2011/01/31 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
python通过索引遍历列表的方法
2015/05/04 Python
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
Python 自动化表单提交实例代码
2017/06/08 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
Python 日期与时间转换的方法
2020/08/01 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
读书演讲主持词
2014/03/18 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
2014年教师节活动总结
2014/08/29 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
超市员工辞职信范文
2015/05/12 职场文书
金陵十三钗观后感
2015/06/04 职场文书
靠谱的活动总结
2019/04/16 职场文书
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android