前台开发事件委托

一.概念

1.事件:HTML DOM使javascript有能力对事件作出反应。比如点击事件,鼠标移入移除事件等。事件通常与函数配合使用,这样就可以通过法师的事件来驱动函数。

2.DOM事件流:事件冒泡流和事件捕获流。参考:https://blog.csdn.net/qq_37413883/article/details/82772472

3.DOM事件模型:捕获,目标,冒泡。

4.事件委托:就是一个事件本来要绑定到某个元素上,然而却绑定到了该元素到的父亲或更高父级元素上,利用事件冒泡原理,触发执行效果。

二.事件委托的有点:

事件委托有两大有点:

1.提高网页性能。

2.通过事件委托添加的事件,对后期动态生成的元素依然有效。

举例:ul下面有三个li,通过循环给每个li添加事件,如果三个li到可以正常触发点击事件了,然后通过js代码在ul里插入(append)两个li节点。
点击所有li,就会发现前面三个li正常触发点击事件,后连新添加的两个li无法触发点击事件。

三.事件委托的使用方法:

给每个ul的li绑定事件,示例如下:

var ul = document.querySelector("ul");

ul.onclick = function(e){
    var e = e || window.event;
    var target = e.target || e.srcElement;

    if(target.nodeName.toLowerCase() === "li"){
        alert("li");
    }
}

从上面代码可以看出,要使用事件委托就要利用event对象。可以看到本来对每个li都要进行事件绑定,现在只用对ul进行事件绑定,减少了对DOM的操作。但是近几年火起来的前端框架angular或者vue,可能淡化了事件委托这个概念。因为如果ul下多个li都是用ng-repeat生成的,一行代码即可。每个li上ng-click绑定方法。但是如果说动态操作添加DOM,就可以看出事件委托的好处。

四.事件委托怎么获取元素下表(索引值):

var ul = document.querySelector("ul");

ul.onclick = function(e){
    var e = e || window.event,
    target = e.target || e.srcElement;

    if(target === li[i]){
       var li = this.querySelectorAll("li");
       index = Array.prototype.indexOf.call(li,target);
       alert("所点击 li 的下标是:" + index);
    }
}    

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值