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 相关文章推荐
jquery 获取自定义属性(attr和prop)的实现代码
Jun 27 Javascript
解析使用JS 清空File控件的路径值
Jul 08 Javascript
基于Javascript实现弹出页面效果
Jan 01 Javascript
js仿京东轮播效果 选项卡套选项卡使用
Jan 12 Javascript
JSON 数据详解及实例代码分析
Jan 20 Javascript
详解angularjs中如何实现控制器和指令之间交互
May 31 Javascript
浅谈react.js中实现tab吸顶效果的问题
Sep 06 Javascript
jquery ajaxfileupload异步上传插件
Nov 21 jQuery
vue-cli脚手架config目录下index.js配置文件的方法
Mar 13 Javascript
详解vue-cli项目中怎么使用mock数据
May 29 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
Sep 09 Javascript
通过实例了解Render Props回调地狱解决方案
Nov 04 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 和 MySQL 基础教程(一)
2006/10/09 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
javascript history对象详解
2017/02/09 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
使用js获取伪元素的content实例
2017/10/24 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
Python操作SQLite简明教程
2014/07/10 Python
python字符串str和字节数组相互转化方法
2017/03/18 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
python如何重载模块实例解析
2018/01/25 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Python实现石头剪刀布游戏
2021/01/20 Python
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
给女儿的表扬信
2014/01/18 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
秸秆管理实施方案
2014/03/15 职场文书
升国旗演讲稿
2014/09/05 职场文书
一条 SQL 语句执行过程
2022/03/17 MySQL