初学事件委托

刚开始接触到事件委托这个概念,还是看javascritp高级程序设计接触到的(js学习必备的书有木有)。

知道了什么是事件冒泡机制,(事件捕获因为不常用就不说了),然后明白了为什么会有事件委托的产生,其实在学习html的时候,就应该明白一个网页不只是平面的,更是立体的,一个页面实际的空间比我们眼睛看到的还要多的多,就像隐藏在海平面下的冰山一样。

如果明白了网页是立体的就好理解为什么有事件冒泡这个东西了。当你鼠标点击或者划过的时候,并不只是点击了最上面的一层,在这个点击的地方重叠的所有元素其实都被点击了。那我们怎么区分点击的是哪个呢,哪个该对点击这个事件响应呢,所以就有了冒泡这个东西,我每次都从最底层向上跑,都跑一遍,匹配到哪一个哪一个元素就响应。

在这个过程中通过event.target来判断,

假设有一个这样的结构:

1 <ul id="list">
2     <li>111</li>
3     <li>222</li>
4     <li>333</li>
5     <li>444</li>
6 </ul>

你可以通过

var target=event.target;
target.nodeName.toLowerCase() == ‘li‘

来判断你想要触发的元素,比如这里,你想当鼠标对 li 执行了点击或者划过事件做某些事情时,可以这样判断。

或者换个写法:

先给每一个 li 添加一个id 的属性。然后这样:

 1 switch(target.id){
 2         case 0:{
 3             // do something
 4             break;
 5         }
 6         case 1:{
 7             // do something
 8             break;
 9         }
10         // ...
11     }

当点击到对应 id 的 li 的时候就会响应对应的事件了。

那么,要怎么实现事件委托呢,先来上代码,页面结构还是上面的结构:

 1 var list=document.getElementById("list");
 2         var items=list.getElementsByTagName("li");
 3         for(var i=0,len=items.length;i<len;i++){
 4             items[i].id=i;
 5         }
 6         list.addEventListener(‘click‘,clickItem,false);
 7         function clickItem(event){
 8             var event=event||window.event;
 9             var target=event.target||window.srcElement;
10             if(target.nodeName.toLowerCase() == ‘li‘){
11                 console.log(target.innerHTML);
12             }
13         }

是不是比较简单呢,但是事件委托却有一个很大的作用,就是提高页面的性能,同时降低与页面的耦合。

当你要给多个(好多个)元素绑定同一个事件时,就可以使用事件委托了,省却了给每一个元素绑定的麻烦,还能提高性能,何乐而不为呢。

还有个好处就是,当你的页面结构发生变化时,你也不用辛辛苦苦的变更事件的代码了,因为事件是绑定在父层元素上,变动父层元素内的页面结构不会影响事件的发生,因为事件流最终都会传递到父层元素的。

时间: 2024-10-21 09:03:37

初学事件委托的相关文章

javascript中的事件委托

这几天看到一个面试题,大概就是,让你给1000个li都添加一个click事件,应该怎么添加?大多数人第一开始的感觉可能就是,每个li上边都添加一个呗,那要是这样的话,估计面试的时候就会GG了,这里就是撤出了我们的事件冒泡和捕获机制,以及事件委托机制,对于上边这些,我们慢慢来看. 首先说一下事件冒泡和事件捕获机制,事件冒泡是有微软公司提出来的,事件捕获是有网景公司提出来的,当时两家是争论的不可开交,后来w3c也没办法,就采取了折中的方式,事件产生后先捕获后冒泡, 通常,在js中监听事件的方法共有三

[JS]笔记14之事件委托

-->什么是事件委托-->事件委托原理-->事件委托优点-->事件源 / 目标源 一.什么是事件委托 通俗的讲,onclick,onmouseover,onmouseout等这些就是事件 委托,就是这个事件本来应该加在某些元素上的,而你却加到其他元素上来完成这个事件. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> &

事件委托能够优化js性能

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>面试题练习img居中</title> <style type="text/css"> img { /*display: table-cell; vertical-align: middle;*/ } html,body{ height: 100%; } div{ w

js事件委托

1.普通事件绑定的弊端: 事件绑定只能绑已经存在的元素,对新增的元素无能为力,而且当元素非常多的时候,比如一个很大的表格的单元格, 每个单元格绑定一个事件很明显开销很大 2.事件委托意义: 解决矛盾是发展的源动力,事件委托就是专门解决这两个问题的,原理是事件捕获的冒泡捕获原理,单元格的事件可以 冒泡到其父元素(如表格,body)再进行捕获处理,减少了事件绑定的数量.新增的单元格事件同样也会冒泡到这些元 素上进行处理,一箭双雕,妙妙妙. 3.事件委托的实现: jquery.live()函数

在Unity中使用事件/委托机制(event/delegate)进行GameObject之

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,[狗刨学习网]unity极致学院,致力于打造业内unity3d培训.学习第一品牌. 一对多的观察者模式机制有什么缺点? 如果你对如何在Unity中使用事件/委托机制还不太了解,建议您查看我的前一篇文章:[Unity3D技巧]在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 在前一篇博客里面,我们写到

事件委托详解

基本概念 事件委托,通俗地来讲,就是把一个元素响应事件(click.keydown......)的函数委托到另一个元素: 一般来讲,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事件的是外层元素,当事件响应到需要绑定的元素上时,会通过事件冒泡机制从而触发它的外层元素的绑定事件上,然后在外层元素上去执行函数. 举个例子,比如一个宿舍的同学同时快递到了,一种方法就是他们都傻傻地一个个去领取,还有一种方法就是把这件事情委托给宿舍长,让一个人出去拿好所有快递,然后再根据收件人一一分发

JS事件委托机制简介

目的--为了减少对DOM的操作,使用事件委托. 理解--举例说明:有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托给前台MM代为签收.现实当中,我们大都采用委托的方案(公司也不会容忍那么多员工站在门口就为了等快递).前台MM收到快递后,她会判断收件人是谁,然后按照收件人的要求签收,甚至代为付款.这种方案还有一个优势,那就是即使公司里来了新员工(不管多少),前台MM也会在收到寄给新员工的快递后核实并代为签收. 原理--事件委托是利用事件的冒泡原理来实现的

JavaScript事件代理和事件委托

一.概述: 那什么叫事件委托呢?它还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件.那这是什么意思呢?网上的各位大牛们讲事件委托基本上都用了同一个例子,就是取快递来解释这个现象,我仔细揣摩了一下,这个例子还真是恰当,我就不去想别的例子来解释了,借花献佛,我摘过来,大家认真领会一下事件委托到底是一个什么原理: 有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托给前台

javascript事件委托机制详解

以个人前端工作面试经历来看,javascript事件委托是问的最多的一类题目之一,熟悉事件委托能够了解你对于javascript的掌握程度. 面试官可能问一下问题,现在有5个li待办事件,需要实现当点击一个li时实现弹出该li的信息 <ul class="top"> <li>橘子</li> <li>香蕉</li> <li>苹果</li> <li>梨子</li> <li>