我大概的查阅了JavaScript 高级程序设计的第三版
对于事件委托它是这样描述的。事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。例, click 事件会一直冒泡到document层次。也就是说,我们可以为整个页面指定一个onclick 事件处理程序,而不必给每个可单机的元素分别添加事件处理程序。以下面的HTML代码为例:
<ul id="myLinks">
<li id="goSomewhere">Go somewhere</li>
<li id="doSomething">Do something</li>
<li id="sayHi">Say hi</li>
</ul>
传统的做法分别添加多个点击事件,
var item1 = document.getElementById("goSomewhere")
var item2 = document.getElementById("doSomething")
var item3 = document.getElementById("sayHi")
EventUtil.addHandler(item1, "click", function(event){
location.href = "http://www.wrox.com"
})
EventUtil.addHandler(item2, "click", function(event){
document.title = "I changed the document's title"
})
EventUtil.addHandler(item3, "click", function(event){
alert('hi')
})
在没有进行使用的框架的常规页面,尤其是动态的 li 标签情况下,不知道有多少个,且如果每个标签都进行绑定,那么绑定函数将不可计数。
关于 EventUtil.addHandle
EventUtil.addHandle:
addHandler 方法,职责是 分别视情况而定使用DOM0级方法、DOM2级方法或IE方法来添加事件。
这个方法属于 一个名字为 EventUtil 的对象。
该方法接收三个参数:要操作的元素、 事件名称和事件处理函数
这里有篇博客来自于2014年(这个位置不在进行扩展讨论)
https://www.cnblogs.com/hykun/p/EventUtil.html
所以就有了事件委托这种解决方法:
var list = document.getElementById("myLinks")
EventUtil.addHandler(list, "click", function(event){
event = EventUtil.getEvent(event)
var target = EventUtil.getEvent(event)
switch(target.id){
case "doSomething":
document.title = "I changed the document's title"
break
case "goSomewhere":
location.href = "http://www.wrox.com"
break
case "sayHi":
alery("hi");
break
}
})
在这段代码中,我们使用事件委托只为
回过来我们再看,vue react 这个框架均在框架中做了相应的继承处理,所以我们不需要对它进行二次处理。所以答案是不用。
然鹅,并没有完,真正完善的代码程序最后还会添加一个解绑函数,留个坑放在这我们后续在进行讨论。
文章采用 知识共享署名 4.0 国际许可协议 进行许可,转载时请注明原文链接。