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

首頁 > 學院 > 開發(fā)設計 > 正文

js中的事件委托總結

2019-11-14 09:28:34
字體:
來源:轉載
供稿:網(wǎng)友

1,什么是事件委托:通俗的講,事件就是onclick,onmouSEOver,onmouseout,等就是事件,委托呢,就是讓別人來做,這個事件本來是加在某些元素上的,然而你卻加到別人身上來做,完成這個事件。

也就是:利用冒泡的原理,把事件加到父級上,觸發(fā)執(zhí)行效果。

好處呢:1,提高性能。

我們可以看一個例子:需要觸發(fā)每個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循環(huán)的話就比較影響性能。

下面我們可以用事件委托的方式來實現(xiàn)這樣的效果。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,新添加的元素還會有之前的事件。

我們還拿這個例子看,但是我們要做動態(tài)的添加li。點擊button動態(tài)添加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循環(huán)已經(jīng)執(zhí)行完畢。

那么我們用事件委托的方式來做。就是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);	}}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 襄垣县| 东乡县| 高雄市| 泊头市| 革吉县| 柳林县| 和顺县| 许昌市| 宜宾市| 志丹县| 恭城| 永昌县| 茶陵县| 陆河县| 武汉市| 泰来县| 日土县| 德化县| 酉阳| 法库县| 玉溪市| 泗洪县| 兰州市| 榆林市| 甘孜县| 西林县| 南靖县| 平湖市| 黄浦区| 资溪县| 昆明市| 兴海县| 南和县| 新平| 中超| 青岛市| 佛冈县| 博爱县| 太原市| 灌云县| 鄂托克前旗|