事件委托

事件流

  1. 捕获:查找目标元素;
  2. 目标:执行目标的事件;
  3. 冒泡:依次执行祖先元素的事件。

    onmouseenter和onmouseleave不支持冒泡;

    onmouseover和onmouseout支持冒泡。

事件对象

  1. event

    属性target:可以判定当前点击的目标对象 火狐

    谷歌:

    target

    srcElement

  2. 在IE低版本 event不兼容

    window.event

    srcElement

    要想获取到目标对象

    3.事件委托

​ 将对自己的操作委托给父元素去执行

		//box	是父元素
box.onclick=function(event){
//事件对象的兼容
var eve=event||window.event;
//获取的是目标对象
var target=eve.target||eve.srcElement;
// target是当前点击的对象
}

​ 在事件委托的时候,鼠标点击的对象有很多中情况,我们要找到我们需要的那个对象;

​ 解决方法:

若target为当前点击的对象,可能有ul,li,h2,p,span,i ;

需要点击li里面的内容,li改变样式,点击ul没有变化;

点击的时候需要找到li

下面的函数传参

var target = function getTarget(target, “tagName”, “LI”, “UL“);

target表示我们点击的事件源,tagName表示查找的属性,LI为属性值,UL为结束条件。

如果target不是UL,证明点击的不是ul,继续查找,如果target[tagName]等于"LI",则证明查找到了li,直接返回target,否则继续查找父节点,直到查找到UL,此时代表没有找到,返回undefined。

		function getTarget(target, attr, value, end) {
while (target != end) { //如果鼠标点击的是end,则直接结束
if (target[attr] == value) { //如果点击的对象的attr属性值为value,则返回该对象
return target;
}
target = target.parentNode; //否则查找其父节点
}
}

事件委托的优势

​ 以ul>li*10为例:

​ 将对li的事件 委托给ul去执行

dom数量减少

函数数量减少

对新增加的元素也是生效的

​ 原理:基于事件冒泡

减少函数数量

减少dom与js的关联

可以动态添加与删除元素

javascript事件委托的原理与实现的更多相关文章

  1. js的事件的三个阶段,事件委托的原理

    DOM2级事件规定的事件流的三个阶段:捕获,目标,冒泡(IE8以及更早版本不支持DOM事件流); 事件流: IE:IE事件流是事件冒泡流  Netscape事件流是事件捕获流 IE事件流 叫做事件冒泡 ...

  2. JavaScript 事件委托的技术原理

    如今的 JavaScript 技术界里最火热的一项技术应该是‘事件委托(event delegation)’了.使用事件委托技术能让你避免对特定的每个节点添加事件监听器:相反,事件监听器是被添加到它们 ...

  3. JavaScript事件委托的技术原理

    如今的JavaScript技术界里最火热的一项技术应该是‘事件委托(event delegation)’了.使用事件委托技术能让你避免对特定的每个节点添加事件监听器:相反,事件监听器是被添加到它们的父 ...

  4. javascript事件委托机制详解

    以个人前端工作面试经历来看,javascript事件委托是问的最多的一类题目之一,熟悉事件委托能够了解你对于javascript的掌握程度. 面试官可能问一下问题,现在有5个li待办事件,需要实现当点 ...

  5. JavaScript 事件委托

    JavaScript事件委托,或者叫事件代理,是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件. 借花献佛的例子(取快递): 有三个同事预计会在周一收到快递.为签收快递,有两种办法 ...

  6. 关于javaScript事件委托的那些事

    今天是第一次写稿,还是有那么一丢丢小鸡冻...回归正题啦... 关于javaScript事件委托不得不说的那些事,为什么要使用事件委托? 我们可以这么说,假设老板要分配一项任务,首先要秘书叫A君来到办 ...

  7. javascript事件委托与"坑"

    问题 这是在工作中遇到的一个问题: 一个textarea文本框,需要动态监听输入文本个数 方案 通过谷歌查到一种完美的兼容方法 "如果使用 onkeydown.onkeypress.onke ...

  8. javascript事件委托和jQuery事件绑定on、off 和one

    一. 事件委托什么是事件委托?用现实中的理解就是:有100 个学生同时在某天中午收到快递,但这100 个学生不可能同时站在学校门口等,那么都会委托门卫去收取,然后再逐个交给学生.而在jQuery 中, ...

  9. javascript 事件委托 和jQuery事件绑定on、off 和one

    一. 事件委托什么是事件委托?用现实中的理解就是:有100 个学生同时在某天中午收到快递,但这100 个学生不可能同时站在学校门口等,那么都会委托门卫去收取,然后再逐个交给学生.而在jQuery 中, ...

随机推荐

  1. Cut 'em all! CodeForces - 982C(贪心dfs)

    K - Cut 'em all! CodeForces - 982C 给一棵树 求最多能切几条边使剩下的子树都有偶数个节点 如果n是奇数 那么奇数=偶数+奇数 不管怎么切 都会有奇数 直接打印-1 贪 ...

  2. Hdoj 1847.Good Luck in CET-4 Everybody! 题解

    Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载 ...

  3. PKUWC2019爆0记

    PKUWC2019爆0记 访问量该骗的还是要骗. 1.20 坐了一天的高铁到jz了,热的一批 1.21 上午开营仪式 下午day1 打开发现有个地主斗 然后开T1 出题人你™搞笑吧放一道sb都能切的题 ...

  4. [FJOI2018]领导集团问题

    [FJOI2018]领导集团问题 dp[i][j],i为根子树,最上面的值是j,选择的最大值 观察dp方程 1.整体Dp已经可以做了. 2.考虑优美一些的做法: dp[i]如果对j取后缀最大值,显然是 ...

  5. 洛谷P1258 小车问题(题解)

    https://www.luogu.org/problemnew/show/P1258(题目传送) 看题的第一眼就把题归为二分题,一直向着二分的方向走,却忽略了数学的推理.推理一番后(看了题解),发现 ...

  6. MySQL 无法启动,出现 “发生系统错误 1067。”

    出现场景 使用 net start mysql 时无法启动,并出现:发生系统错误 1067. 解决过程 很多情况都可以导致该错误提示,可以先查找 "Windows 日志" : 打开 ...

  7. Python的编码和解码

    Python的编码和解码 在不同的国家,存在不同的文字,由于现在的软件都要做到国际化通用,所以必须要有一种语言或编码方式,来实现各种编码的解码,然后重新编码. 在西方国家,没有汉字,只有英文,所以最开 ...

  8. ubuntu:基本操作;

    1.系统时间与网络时间同步: sudo dpkg-reconfigure tzdata 注: 该博文为扩展型:

  9. webserver Etcd Cluster / CoreOS etcd / macOS etcd

    s https://coreos.com/etcd/ https://coreos.com/etcd/docs/latest/ macOS mojave etcd 003deMac-mini:~ ma ...

  10. 金融量化分析【day112】:股票数据分析Tushare1

    目录 1.使用tushare包获取某股票的历史行情数据 2.输出该股票所有收盘比开盘上涨3%以上的日期 3.输出该股票所有开盘比前日收盘跌幅超过2%的日期 4.假如我从2010年1月1日开始,每月第一 ...