JavaScript事件委托的详细介绍(附代码)


本文摘自PHP中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于JavaScript事件委托的详细介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

事件委托(又名事件代理),就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。

网上有关于事件委托的一个“取快递”例子,十分生动,这里我对它作一些修改和拓展,然后通过程序来说明事件委托的机制。

某公司有三位员工,他们的快递收件地址为公司,每当有快递送达时,快递员拨打其电话进行通知,他们接到电话后去取件。

员工ID员工名称联系方式
A111111
B222222
C333333
对应到页面,就是每个员工是一个标记:

1

2

3

4

5

<ul id="前台工作人员">

    <li id="A">员工甲</li>

    <li id="B">员工乙</li>

    <li id="C">员工丙</li>

</ul>

每位员工接电话取快递的行为就是一个个事件,这里我们假设收取快递行为对应着onclick事件:

1

2

3

4

5

6

7

8

9

A.onclik = function() {

    收取快递;

};

B.onclick = function() {

    收取快递;

};

C.onclick = function() {

    收取快递;

};

以上的实现,通常为通过循环遍历每一个员工,为其增加事件:

1

2

3

4

5

6

7

8

/*程序1*/

var aUl = document.getElemengtByID("前台工作人员");

var aLi = aUl.getElemengtsByTagName("li");

for (var i = 0; i < aLi.length; i++) {

    aLi[i].onclick = function() {

        收取快递;

    }

}

可以看到,为每个员工都设置一个事件,会产生冗余代码,占用内存,同时会进行多次DOM操作(与DOM节点进行交互),影响页面运行性能。

“减少DOM操作是性能优化的主要思想之一”

于是,我们理所当然地想到:为什么不能让前台工作人员帮我们签收快递呢?

1

2

3

4

5

6

7

8

9

10

11

<ul id="前台工作人员">

    <li id="A">员工甲</li>

    <li id="B">员工乙</li>

    <li id="C">员工丙</li>

</ul>

 

/*程序2*/

var tel = document.getElementById("前台工作人员");

tel.onclick = function() {

    收取快递;

}

假设此时快递员打电话通知员工甲取件(onclick),但员工甲的DOM节点<li>并无对应事件(onclick),所以这个事件会“冒泡”到<li>的父元素<ul>,发现<ul>上有onclick处理事件,于是触发该事件,由前台工作人员收取快递。

可以看到,这样一来,不仅缩减代码量,同时与DOM节点的交互次数也得到了缩减。

还有一个优点:当增加新的DOM节点时,自动携带父元素的事件效果。也就是说,当有一个新员工丁来公司后,前台工作人员会直接帮他收取快递,而无需专门为他设置事件。

阅读剩余部分

相关阅读 >>

javascript打包是什么意思

javascript运行没有效果是怎么回事?

javascript怎么进行强制类型转换

es6函数的扩展介绍(代码示例)

javascript如何添加随机数

10个让你效率更高的math对象方法,快来收藏吧!

javascript中如何获取当前时间

ios加载html5 audio标签时遇到的问题分享

javascript如何显示隐藏div

js回调函数是什么

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...