问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

javascript什么时候使用事件委托8

发布网友 发布时间:2023-09-25 20:11

我来回答

1个回答

热心网友 时间:2024-12-13 09:30

通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。

也就是:利用冒泡的原理,把事件加到父级上,触发执行效果。

好处呢:1,提高性能。

我们可以看一个例子:需要触发每个li来改变他们的背景颜色。

<ul id="ul">
<li>aaaaaaaa</li>
<li>bbbbbbbb</li>
<li>cccccccc</li>
</ul>
window.onload = function(){
var oUl = document.getElementById("ul");
var aLi = oUl.getElementsByTagName("li");
for(var i=0; i<aLi.length; i++){
aLi[i].onmouseover = function(){
this.style.background = "red";
}
aLi[i].onmouseout = function(){
this.style.background = "";
}
}
}

这样我们就可以做到li上面添加鼠标事件。

但是如果说我们可能有很多个li用for循环的话就比较影响性能。

下面我们可以用事件委托的方式来实现这样的效果。html不变

window.onload = function(){
var oUl = document.getElementById("ul");
var aLi = oUl.getElementsByTagName("li");
/*
这里要用到事件源:event 对象,事件源,不管在哪个事件中,只要你操作的那个元素就是事件源。
ie:window.event.srcElement
标准下:event.target
nodeName:找到元素的标签名
*/
oUl.onmouseover = function(ev){
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
//alert(target.innerHTML);
if(target.nodeName.toLowerCase() == "li"){
target.style.background = "red";
}
}
oUl.onmouseout = function(ev){
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
//alert(target.innerHTML);
if(target.nodeName.toLowerCase() == "li"){
target.style.background = "";
}
}
}

好处2,新添加的元素还会有之前的事件。

我们还拿这个例子看,但是我们要做动态的添加li。点击button动态添加li

如:

<input type="button" id="btn" />
<ul id="ul">
<li>aaaaaaaa</li>
<li>bbbbbbbb</li>
<li>cccccccc</li>
</ul>

不用事件委托我们会这样做:
window.onload = function(){
var oUl = document.getElementById("ul");
var aLi = oUl.getElementsByTagName("li");
var oBtn = document.getElementById("btn");
var iNow = 4;
for(var i=0; i<aLi.length; i++){
aLi[i].onmouseover = function(){
this.style.background = "red";
}
aLi[i].onmouseout = function(){
this.style.background = "";
}
}
oBtn.onclick = function(){
iNow ++;
var oLi = document.createElement("li");
oLi.innerHTML = 1111 *iNow;
oUl.appendChild(oLi);
}
}

这样做我们可以看到点击按钮新加的li上面没有鼠标移入事件来改变他们的背景颜色。

因为点击添加的时候for循环已经执行完毕。

那么我们用事件委托的方式来做。就是html不变

window.onload = function(){
var oUl = document.getElementById("ul");
var aLi = oUl.getElementsByTagName("li");
var oBtn = document.getElementById("btn");
var iNow = 4;
oUl.onmouseover = function(ev){
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
//alert(target.innerHTML);
if(target.nodeName.toLowerCase() == "li"){
target.style.background = "red";
}
}
oUl.onmouseout = function(ev){
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
//alert(target.innerHTML);
if(target.nodeName.toLowerCase() == "li"){
target.style.background = "";
}
}
oBtn.onclick = function(){
iNow ++;
var oLi = document.createElement("li");
oLi.innerHTML = 1111 *iNow;
oUl.appendChild(oLi);
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人字梯有什么安全隐患吗 怎样激发青春期孩子的内驱力 如何激发青春期孩子的内驱力 ...小题1:移船相近邀相见,添酒回灯重开宴。 , &amp;n... L1和L2串联 电压表并联在L1两端 当L1断路后 电压表测的为什么就成了电源... L1和L2串联,用电压表测L1两端的电压,L2不亮时,电流表为什么测的是电源电... 电路上传连两个灯泡L1与L2电压表测L1电压,当L1短路与断路时电压表情况... 对方拖着不办离婚手续该怎么办 计算机一级电子表格怎么拿分 如何配置思源黑体为latex中文字体? 思源黑体字体怎么安装 ...就“滴滴”响,机子昨天连续开了一天。这是怎么会事啊? 冰雪奇缘 中,一首歌曲 Do you want to bui...177 vivo手机主题变成黑白色了怎么改过来43 男人梦见地里种的黄米丰收在望? 做水果披萨用甜芝士还是咸芝士5 为什么芝士片和披萨里的拉丝芝士是甜的或咸的,而块状的奶酪芝士... 在js中,事件代理和事件委托是什么区别啊,怎么解释啊2 早上起床喝白开水好不好?655 一个手机号注册了两个,怎样解绑第二个? 怎样在电脑版阴阳师登录手机阴阳师手游的账号?71 同一个手机注册了两个码,怎么注销一个码? 万孚刹车盘产地是哪里 小学课本书皮尺寸是? 索尼RX100M5的储存速度怎么样? 怎样识别服装吊牌的年份9 插排头坏了,自己更换的问题 !在线等!————2 一只手机号注册了两个,想要注销一个怎么注销? 同一个手机号注册两个怎么删除一个? 人教版五年级下册数学打电话怎样上7分钟可以通知多少人?26 doyouwanttobuiltasnowman歌词404 2015襄阳铁路大学二本投档线 防校园欺凌10条简短标语有哪些? 为啥现在汽车维修行业越来越难做? gcr5的硬度 新版与狼共舞的货号怎么看年份 怎样识别衣服的生产日期14 ...是终身的吗?我打算买一辆电动车,我怕明天就不让骑了。请回答... 同一个手机注册了两个码,怎么注销一个码? 嫂子用韩文怎么说1 人教版五年级下册数学打电话导学案1 大众途观L车载蓝牙怎么连接,途观L手机互联映射教程 舟山哪个船员中介好 数学实践讲解分析(打电话)6 平时喜欢连拍,不知道索尼RX100M5连拍效果怎么样,画质是否好? 新魔界和新英雄年代哪个好玩‘‘‘ 剪掉插座一头直接连电线的问题.简单问题懂电的来!7 有时候人会在睡梦中感觉从高空掉落,是在长个子吗? javascript&#47;jquery怎么判断所点击元素是其父元...11 芝士片到底是甜的还是咸的?1 芝士是什么味的?甜的还是咸的?298