当前第2页 返回上一页
例如,当新员工丁来到公司后:
1 2 3 4 5 6 7 8 9 10 11 12 13 | ...
<input type= "button" id= "btn" value= "添加新员工" >
...
...
var aBtn = document.getElementById( "btn" );
aBtn.onclick = function () {
var aLi = document.createElement( "li" );
oLi.innerHTML = "员工丁" ;
aUl.appendChild(aLi);
}
...
|
在不使用事件委托的程序中,新增的员工丁是没有事件的,我们需要用一个函数包含住程序1:
1 2 3 4 5 6 7 8 9 10 | function pro1() {
var aUl = document.getElemengtByID( "前台工作人员" );
var aLi = aUl.getElemengtsByTagName( "li" );
for ( var i = 0; i < aLi.length; i++) {
aLi[i].onclick = function () {
收取快递;
}
}
}
|
然后在新增新员工丁的程序的末尾执行这个函数:
1 2 3 4 5 6 | var aBtn = document.getElementById( "btn" );
aBtn.onclick = function () {
...
pro1();
}
|
这样做的缺点是显而易见的:DOM节点交互次数成倍增加。
若我们采用事件委托机制来实现,就不会存在这个问题,子元素节点的onclick事件会直接在父元素节点得到执行。
到这里,我们会想到:对于同一种事件来说,使用事件委托将其放置在父元素节点上固然很方便。但如果对于不同的子元素节点要执行不同的事件呢,还能使用事件委托吗?
答案是肯定的。
例如上述三位公司员工,总是使用固定品牌的快递:
- 员工甲因为便宜,喜欢使用申通快递,申通只送到园区大门;
- 员工乙是京东会员,总是购买京东自营商品,京东快递送到楼下;
- 员工丙是顺丰VIP,顺丰快递会送到送到所在楼层大厅。
他们三位在接到电话后,前台工作人员需要去不同的地方取件,对于不使用事件委托的程序,需要对每个人设置独特的处理事件:
1 2 3 4 5 6 7 8 9 10 11 12 13 | var A = document.getElementById( "A" );
var B = document.getElementById( "B" );
var C = document.getElementById( "C" );
A.onclick = function () {
去园区大门取快递;
}
B.onclick = function () {
去楼下取快递;
}
C.onclick = function () {
去本层大厅取快递;
}
|
至少需要三次DOM操作,而且为每一个对应节点都设置了事件函数。
而若采用事件委托:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var aUl = document.getElemengtByID( "前台工作人员" );
aUl.onclick = function (ev) {
var target = ev || window.event;
var target = ev.target || ev.srcElement;
if (target.nodeName.toLocaleLowerCase() == "li" ) {
switch (target.id) {
case "A" :
去园区大门取快递;
break ;
case "B" :
去楼下取快递;
break ;
case "C" :
去本层大厅取快递;
break ;
}
}
}
|
这样一来,DOM操作就只有一次,其他的操作都在JS内进行,可以有效提升网页性能。
以上便是JS事件委托的基本思想。简而言之,就是利用事件冒泡这一特点,来对事件进行管理,减少冗余代码,减少不必要的创建,减少交互操作以节约内存和提高性能。
事件冒泡
事件冒泡是当触发某个DOM元素节点时,若该节点没有对应事件,则检查其父元素是否有对应事件,若有,则执行,若没有,继续向上检查。与其对应的还有事件捕获
以上就是JavaScript事件委托的详细介绍(附代码)的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
nodejs的爬虫框架superagent
javascript属于哪种语言类型
介绍 javascript 代码加不加分号有什么区别
html表单的工作原理(图文)
javascript怎么设置select选中
javascript中回流(重排)与重绘的相关知识介绍(代码示例)
javascript怎么将数值转为字符串
typescript基础类型以及与javascript对比讲解
javascript高阶函数的用法介绍
javascript如何设置只能输入数字
更多相关阅读请进入《javascript》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » JavaScript事件委托的详细介绍(附代码)