国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

js中的事件委托總結

2019-11-14 09:39:20
字體:
來源:轉載
供稿:網友

1,什么是事件委托:通俗的講,事件就是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.targetnodeName:找到元素的標簽名*/	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);	}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇康县| 长顺县| 昆明市| 连平县| 岐山县| 滁州市| 信宜市| 孟州市| 鲁甸县| 洪泽县| 三台县| 宣武区| 东城区| 汝南县| 康定县| 汉源县| 潜江市| 揭西县| 五莲县| 霞浦县| 新民市| 永昌县| 犍为县| 远安县| 合作市| 永春县| 长兴县| 色达县| 留坝县| 晋宁县| 炎陵县| 蒙阴县| 天台县| 宜丰县| 崇礼县| 辰溪县| 富民县| 桐梓县| 文化| 安义县| 四会市|