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 相关文章推荐
客户端脚本中常常出现的一些问题和调试技巧
Jan 09 Javascript
基于jquery的实现简单的表格中增加或删除下一行
Aug 01 Javascript
jQuery中获取Radio元素值的方法
Jul 02 Javascript
js导入导出excel(实例代码)
Nov 25 Javascript
Ajax与服务器(JSON)通信实例代码
Nov 05 Javascript
微信小程序 视图容器组件的详解及实例代码
Jan 19 Javascript
浅谈react.js 之 批量添加与删除功能
Apr 17 Javascript
vue2.0结合Element实现select动态控制input禁用实例
May 12 Javascript
Webpack执行命令参数详解
Jun 17 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
Aug 29 jQuery
详解vue项目中调用百度地图API使用方法
Apr 25 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
Oct 26 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
杏林同学录(三)
2006/10/09 PHP
PHP添加MySQL数据记录代码
2008/06/07 PHP
php zend 相对路径问题
2009/01/12 PHP
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
2015/03/03 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
Node学习记录之cluster模块
2017/05/31 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
3种vue路由传参的基本模式
2018/02/22 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
Python中的getopt函数使用详解
2015/07/28 Python
Python编程求质数实例代码
2018/01/31 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
python 决策树算法的实现
2020/10/09 Python
python 写一个文件分发小程序
2020/12/05 Python
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
幼儿园大班区域活动总结
2014/07/09 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
财务人员入职担保书
2015/09/22 职场文书
体育委员竞选稿
2015/11/21 职场文书
详解CSS3浏览器兼容
2022/12/24 HTML / CSS