做項目的時候遇到一個問題。
在我的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);
}
這樣就解決了問題。