javascript --- 事件委託

javascript 之 事件委託

優點1、提高性能(只需要對父級進行操作,子節點同樣會擁有其相關屬性和方法)

    2、對於新添加的事件,也讓其擁有父級事件的屬性

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script type="text/javascript">
		//事件委託
		//讓父級委託(冒泡事件)
		//優點:1、提高性能
		window.οnlοad=function  () {
			var oUl=document.getElementById('myUl');
			var aLi=document.getElementsByTagName('li');
			var oInput=document.getElementById('input1');
			var iNow=aLi.length;

			/*
			for (var i = 0; i < aLi.length; i++) {
				aLi[i].οnmοuseοver=function  () {
					this.style.background="red";
				}
				aLi[i].οnmοuseοut=function  () {
					this.style.background="";
				}

			};*/

			oUl.οnmοuseοver=function  () {
				//找到操作對象,event,對象;事件源:不管在哪個事件中的那個元素就是事件源
				var event=event||window.event;
				var target=event.target||event.srcElement;

				//找元素的標籤名NodeName
				//alert(target.nodeName)
				if(target.nodeName.toLowerCase()=='li'){//只讓指定的子節點擁有某些屬性
					target.style.background="red";
				}
				

			}
			oUl.οnmοuseοut=function  () {
				//找到操作對象,event,對象;事件源:不管在哪個事件中的那個元素就是事件源
				var event=event||window.event;//w3c標準和Ie標準
				var target=event.target||event.srcElement;
				if(target.nodeName.toLowerCase()=='li'){
					target.style.background="";
				}			
			}



			/*	for (var i = 0; i < aLi.length; i++) {
					aLi[i].οnclick=function(){
						alert("123");
					}
				};*/

			/*	oUl.οnclick=function  () {
					alert("123");//發生冒泡!!!委託了讓ul觸發,讓父級做委託
				}
			*/


			//事件委託的優點2:新添加的元素,還有之前的事件的屬性
			
			oInput.οnclick=function  () {
				iNow++;
				var oLi=document.createElement('li');//自身沒有事件,但是其父級有,插入新節點後,其父級的事件會影響到當前事件
				oLi.innerHTML=1111*iNow;
				oUl.appendChild(oLi)
			}

		}
	</script>
</head>
<body>
	<input type="button" value="添加" id='input1'>
	<ul id="myUl">
		<li>1111</li>
		<li>2222</li>
		<li>3333</li>
		<li>4444</li>
	</ul>
</body>
</html>



發佈了39 篇原創文章 · 獲贊 15 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章