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

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

js中的事件委托總結

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

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);	}}


上一篇:PAT甲級1034

下一篇:ACM簡單計算題-填詞

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴南区| 丹东市| 申扎县| 津南区| 凌源市| 怀宁县| 临城县| 即墨市| 蒙自县| 呼伦贝尔市| 余干县| 花莲市| 罗江县| 通许县| 雅江县| 揭西县| 浠水县| 蛟河市| 阿勒泰市| 玉溪市| 宜阳县| 永州市| 博湖县| 星子县| 黔西县| 靖宇县| 隆化县| 莱芜市| 通许县| 西平县| 黄冈市| 丰城市| 柯坪县| 亚东县| 宣威市| 迁安市| 峡江县| 盐源县| 西和县| 买车| 项城市|