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与flash交互通信基础教程
Aug 07 Javascript
Chrome中模态对话框showModalDialog返回值问题的解决方法
May 25 Javascript
如何用jquery控制表格奇偶行及活动行颜色
Apr 20 Javascript
php结合imgareaselect实现图片裁剪
Jul 05 Javascript
jquery+正则实现统一的表单验证
Sep 20 Javascript
JQuery EasyUI的使用
Feb 24 Javascript
详解AngularJS controller调用factory
May 19 Javascript
vue.js选中动态绑定的radio的指定项
Jun 02 Javascript
Angular2 组件通信的实例代码
Jun 23 Javascript
jQuery选择器之基本过滤选择器用法实例分析
Feb 19 jQuery
jquery 时间戳转日期过程详解
Oct 12 jQuery
Javascript中window.name属性详解
Nov 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
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
PHP、Java des加密解密实例
2015/04/27 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
Javascript保存网页为图片借助于html2canvas库实现
2014/09/05 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
关于vue表单提交防双/多击的例子
2019/10/31 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
浅析Python中的join()方法的使用
2015/05/19 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
浅析python 字典嵌套
2020/09/29 Python
python基于openpyxl生成excel文件
2020/12/23 Python
python实现计算图形面积
2021/02/22 Python
大学生新闻专业个人自我评价
2013/11/12 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
求职信模板标准格式范文
2014/02/23 职场文书
安全责任书怎么写
2014/07/28 职场文书
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL