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


当前第2页 返回上一页

例如,当新员工丁来到公司后:

1

2

3

4

5

6

7

8

9

10

11

12

13

...

<input type="button" id="btn" value="添加新员工">

...

 

...

/*程序3*/

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

/*程序4*/

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

/*程序5*/

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》频道 >>




打赏

取消

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

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

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

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

评论

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