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源码]超长文章自动分页(客户端版)
Jan 09 Javascript
Jquery动态添加及删除页面节点元素示例代码
Jun 16 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
Jun 11 Javascript
js代码实现点击按钮出现60秒倒计时
Jan 28 Javascript
jquery使用on绑定a标签无效 只能用live解决
Jun 02 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
微信小程序 Storage API实例详解
Oct 02 Javascript
Angular JS 生成动态二维码的方法
Feb 23 Javascript
简单实现jQuery弹幕效果
May 06 jQuery
Vue.js特性Scoped Slots的浅析
Feb 20 Javascript
vue学习笔记之给组件绑定原生事件操作示例
Feb 27 Javascript
Openlayers实现地图全屏显示
Sep 28 Javascript
基于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项目的方法
2006/10/09 PHP
php cookie的操作实现代码(登录)
2010/12/29 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
用Python设计一个经典小游戏
2017/05/15 Python
Python打印输出数组中全部元素
2018/03/13 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
python语言元素知识点详解
2019/05/15 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
python3处理word文档实例分析
2020/12/01 Python
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
高级技校毕业生自荐信
2013/11/18 职场文书
优秀演讲稿范文
2013/12/29 职场文书
集团薪酬管理制度
2014/01/13 职场文书
幼儿园新年寄语
2014/04/03 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
教师节简报
2015/07/20 职场文书
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python