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 输出内容到新窗口具体实现代码
May 31 Javascript
jquery控制display属性为none或block
Mar 31 Javascript
JavaScript中输出标签的方法
Aug 27 Javascript
javascript下拉框选项单击事件的例子分享
Mar 04 Javascript
JavaScript判断按钮被点击的方法
Dec 13 Javascript
js实现对ajax请求面向对象的封装
Jan 08 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
Aug 05 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
Apr 25 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
Jun 12 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
Jun 16 Javascript
vue如何限制只能输入正负数及小数
Jul 04 Javascript
vue-router之解决addRoutes使用遇到的坑
Jul 19 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
虹吸式咖啡壶操作
2021/03/03 冲泡冲煮
php 执行系统命令的方法
2009/07/07 PHP
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
koa-router源码学习小结
2018/09/07 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
vue实现的封装全局filter并统一管理操作示例
2020/02/02 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
解决vue addRoutes不生效问题
2020/08/04 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
以windows service方式运行Python程序的方法
2015/06/03 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
党员教师四风问题对照检查材料
2014/09/26 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
新手初学Java List 接口
2021/07/07 Java/Android
vue 给数组添加新对象并赋值
2022/04/20 Vue.js