理解事件委托(1):js中的事件委托
什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。
也就是:利用冒泡的原理,把事件加到父级上,触发执行效果。
好处呢:1,提高性能。
我们可以看一个例子:需要触发每个li来改变他们的背景颜色。
<body>
<ul id="number">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<input type="button" value="add" id="add" />
</body>
<script>
window.onload=function(){
var ul=document.getElementById("number");
var li=ul.getElementsByTagName("li");
for (var i = 0; i < li.length; i++) {
li[i].onmouseover=function(){
this.style.background="red";
}
li[i].onmouseout=function(){
this.style.background="white";
}
};
}
</script>
这样我们就可以做到li上面添加鼠标事件。
但是如果说我们可能有很多个li用for循环的话就比较影响性能。
下面我们可以用事件委托的方式来实现这样的效果。html不变
<script> window.onload=function(){ var ul=document.getElementById("number"); var li=ul.getElementsByTagName("li"); ul.onmouseover=function(ev){ var ev=ev||window.event; var target=ev.target||ev.srcElement; if(target.nodeName.toLowerCase()=="li"){ target.style.background="red"; } } ul.onmouseout=function(ev){ var ev=ev||window.event; var target=ev.target||ev.srcElement; if(target.nodeName.toLowerCase()=="li"){ target.style.background="white"; } } } </script>
好处2,新添加的元素还会有之前的事件。
我们还拿这个例子看,但是我们要做动态的添加li。点击button动态添加li,这样做我们可以看到点击按钮新加的li上面没有鼠标移入事件来改变他们的背景颜色。
因为点击添加的时候for循环已经执行完毕。
那么我们用事件委托的方式来做。就是html不变
<script> window.onload=function(){ var ul=document.getElementById("number"); var li=ul.getElementsByTagName("li"); var add=document.getElementById("add"); add.onclick=function(){ var li=document.createElement("li"); li.innerHTML="z"; ul.appendChild(li); } ul.onmouseover=function(ev){ var ev=ev||window.event; var target=ev.target||ev.srcElement; if(target.nodeName.toLowerCase()=="li"){ target.style.background="red"; } } ul.onmouseout=function(ev){ var ev=ev||window.event; var target=ev.target||ev.srcElement; if(target.nodeName.toLowerCase()=="li"){ target.style.background="white"; } } } </script>
ok:
如同在我们用微博中,新发微博照样有之前的鼠标事件。
posted on 2016-08-10 17:38 EchoLong333 阅读(178) 评论(0) 收藏 举报
浙公网安备 33010602011771号