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 相关文章推荐
cssQuery()的下载与使用方法
Jan 12 Javascript
用jscript实现列出安装的软件列表
Jun 18 Javascript
javascript 窗口加载蒙板 内嵌网页内容
Nov 19 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
Dec 18 Javascript
jQuery多个版本和其他js库冲突的解决方法
Aug 11 Javascript
理理Vue细节(推荐)
Apr 16 Javascript
通过vue手动封装on、emit、off的代码详解
May 29 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
Dec 25 Javascript
vue proxy 的优势与使用场景实现
Jun 15 Javascript
vue 获取元素额外生成的data-v-xxx操作
Sep 09 Javascript
vue常用高阶函数及综合实例
Feb 25 Vue.js
JavaScript 反射学习技巧
Oct 16 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 面向对象 final类与final方法
2010/05/05 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
用cssText批量修改样式
2009/08/29 Javascript
JavaScript Timer实现代码
2010/02/17 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
2013/11/27 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
React Native 图片查看组件的方法
2018/03/01 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
JS实现商品橱窗特效
2020/01/09 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
python2.7实现爬虫网页数据
2018/05/25 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
Python类如何定义私有变量
2020/02/03 Python
python3的pip路径在哪
2020/06/23 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
优秀毕业大学生推荐信
2013/11/13 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
企业公益活动策划方案
2014/08/24 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
客户答谢会致辞
2015/07/30 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python
详解Django中 render() 函数的使用方法
2021/04/22 Python
PHP使用QR Code生成二维码实例
2021/07/07 PHP