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 相关文章推荐
动态加载iframe
Jun 16 Javascript
javascript URL锚点取值方法
Feb 25 Javascript
关于JavaScript中原型继承中的一点思考
Jul 25 Javascript
jQuery+css实现炫目的动态块漂移效果
Jan 28 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
Mar 01 Javascript
关于Jquery中的事件绑定总结
Oct 26 Javascript
DWR3 访问WEB元素的两种方法实例详解
Jan 03 Javascript
json的结构与遍历方法实例分析
Apr 25 Javascript
postman+json+springmvc测试批量添加实例
Mar 31 Javascript
小程序实现新用户判断并跳转激活的方法
May 20 Javascript
vue中的v-if和v-show的区别详解
Sep 01 Javascript
JavaScript判断数组类型的方法
Oct 23 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反弹shell实现代码
2009/04/22 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
python list中append()与extend()用法分享
2013/03/24 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
Tensorflow卷积神经网络实例
2018/05/24 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
GafasWorld西班牙:购买太阳镜、眼镜和隐形眼镜
2019/09/08 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
四川成都导游欢迎词
2014/01/18 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
大学生开西餐厅创业计划书
2014/02/01 职场文书
2014年班干部工作总结
2014/11/25 职场文书
招商银行工作证明
2015/06/17 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
Python 制作自动化翻译工具
2021/04/25 Python
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript