2009-05-24 101 views
0
var thumbs = document.getElementsByTagName("img"); 
    for (var i=0; i<thumbs.length; i++) 
    { 
     Core.addEventListener(thumbs[i], "click", function() {alert(i);}); 
    } 

在上面的代碼中,警報總是顯示18。這是圖像縮略圖的數量。我希望它顯示我點擊了哪個縮略圖。爲什麼沒有顯示出來? 我也需要將點擊縮略圖的值傳遞給另一個函數,以便我可以顯示後續的完整圖像。 任何人都可以請求幫助嗎?image gallery loop JS

如果還有更好的方法可以做到這一點,請提出建議。 提前感謝。

回答

0

這是因爲內部匿名函數關閉變量i,因此它會始終顯示迭代的最後一個值。您下一步:

Core.addEventListener(thumbs[i], "click", (function(j) 
              { 
               return function() 
                 { 
                 alert(j); 
                 }; 
              })(i)); 

說明:

在你的代碼迭代變量i是一種對你產生了事件處理內部匿名函數的全局變量,但你必須要注意的是,雖然好像你創造不同的匿名功能,他們都在看我在更全球的範圍內,它對我們來說都是一樣的。所以最後的值會被警告,爲了避免它,我爲你創建了另一個包裝函數,以便將i的值包含在另一個範圍內,以便不同的元素將看到不同的警報。在評論中的解釋也是正確的,我建議你的谷歌Javascript關閉和閱讀一些關於它的文章,一旦你有了一個想法它可能會變得非常強大的設備。

+0

這工作。你可以解釋一下上面的代碼是幹什麼的? – amit 2009-05-24 20:29:30