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 相关文章推荐
分析 JavaScript 中令人困惑的变量赋值
Aug 13 Javascript
JS 进度条效果实现代码整理
May 21 Javascript
js/jquery获取文本框输入焦点的方法
Mar 04 Javascript
深入探寻javascript定时器
Jan 02 Javascript
javascript制作照片墙及制作过程中出现的问题
Apr 04 Javascript
原生js图片轮播效果实现代码
Oct 19 Javascript
Bootstrap禁用响应式布局的实现方法
Mar 09 Javascript
JavaScript如何一次性展示几万条数据
Mar 30 Javascript
深入探究node之Transform
Jul 20 Javascript
VUE DOM加载后执行自定义事件的方法
Sep 07 Javascript
JavaScript键盘事件常见用法实例分析
Jan 03 Javascript
python虚拟环境 virtualenv的简单使用
Jan 21 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
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
php微信开发自定义菜单
2016/08/27 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
PHP _construct()函数讲解
2019/02/03 PHP
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
python中threading超线程用法实例分析
2015/05/16 Python
Python 的内置字符串方法小结
2016/03/15 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
酒店应聘自荐信
2013/11/09 职场文书
小学教研工作制度
2014/01/15 职场文书
销售人员自我评价
2014/02/01 职场文书
班级寄语大全
2014/04/10 职场文书
公司贷款承诺书
2014/05/30 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书