循環中設置的監聽事件怎麼傳遞參數

        做項目的時候遇到一個問題。

        在我的php裏面有一個div一直不間斷地自左向右滾動着多張小圖,我js文件裏要做到的效果是一旦點擊其中一個小圖就把這個小圖放大。

        於是我在一個循環裏給這二十個小圖設置監聽。一旦被觸發點擊函數,那麼程序需要知道是哪個小圖被點擊了,所以我需要傳遞一個參數(i)來告知程序哪一個小圖被點了(代碼中的pics數組存儲的是在頁面中通過getElementsByTagName獲得的20張小圖,這段代碼在window.onload裏面被調用):
 

for(var i=0;i<20;i++)  
{            
	pics[i].onclick=function()
 	{
 		alert(i);
	};   
};

        如上。問題卻出現了——明眼人可能很快看出來這樣做的結果就是,無論點擊哪張小圖,alert出來的都是20,而不是被點中的小圖的序號。這是因爲在window.onload裏面從一開始就調用了這塊循環,變量 i 理所當然地跟着循環遞增到了20。而當監聽函數被觸發(小圖被點擊),這個時候alert出來的 i 當然就是20。

        後來找到網友給出的回答:

	for(var i=0;i<20;i++)
	{		
		var paraTrans=function(i)
		{
			pics[i].onclick = function()
			{
				alert(i);
			}
		};
		paraTrans(i);
	}

        這樣就解決了問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章