事件委托是什么
- 我的理解:事件委托就是当有很多个儿子辈的时候,利用JavaScript中的冒泡机制(不懂就看下面的参考资料),在父节点上处理子节点触发的事件,而不是直接在儿子元素中写事件。
- 如果看不懂,可以看下面的参考资料,他们讲的挺好的。
事件委托封装成函数
function eventDelegation(obj){
if(obj.dom.addEventListener){
obj.dom.addEventListener(obj.event, fun)
}else{
obj.attachEvent("on" + obj.event, fun)
}
function fun(e){
e = window.event
window.event = e
e.target = e.target || e.srcElement
e.srcElement = e.target
if(this == e.target) return
obj.res(e = e)
}
}
利用上述函数的例子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>test</title>
<style>
li{
cursor: pointer;
}
</style>
</head>
<body>
<div id="div">
<ul id="ul">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
</div>
</body>
<script>
let ul = document.getElementById("ul")
let t = {
dom: ul,
event: "click",
res: function(e){
console.log(e)
e.target.innerHTML = "点击了我"
},
}
function eventDelegation(obj){
if(obj.dom.addEventListener){
obj.dom.addEventListener(obj.event, fun)
}else{
obj.attachEvent("on" + obj.event, fun)
}
function fun(e){
e = window.event
window.event = e
e.target = e.target || e.srcElement
e.srcElement = e.target
if(this == e.target) return
obj.res(e = e)
}
}
eventDelegation(t)
</script>
</html>
参考资料
|