2011-03-02 97 views
0

我的UL有5個Li,在裏面有一個HREF,當我點擊A時,它必須顯示它的索引號。例如,如果我點擊3華里,那麼它應該ALET 3.我使用這個功能:如何獲得點擊元素的索引號?

var titles = document.getElementById('bigscreen-titles'); if(titles){ 
    var links = titles.getElementsByTagName('a'); 

    for(i=0;i<links.length;i++){ 
     links[i].onclick = function(){ 
      alert(i); 
     } 
    } 
} 

,但它始終顯示5.即使我點擊1華里,它表現出同樣的,任何正確的方法..請

+0

是否有任何機會,你除了給出一個答案? – scheffield 2011-03-10 07:39:54

回答

1

解去如下:

if(titles){ 
    var links = titles.getElementsByTagName('a'); 

    for(i=0;i<links.length;i++){ 
     links[i].onclick = function(currentIndex){ 
      return function() { 
       alert(currentIndex); 
      } 
     }(i) 
    } 
} 

外部函數被調用立即功能。這意味着該功能在定義後立即執行。所以它返回一個新的函數,即內部函數。這些功能獲得對currentIndex的參考。這被稱爲封閉。

0

這種行爲是由於'閉包'的事情,基本上是因爲警報函數在循環結束後的某個時間點運行,'i'在此時爲5。

您應該能夠通過簡單的改變的方式來解決這個...

if(titles){ 
    var links = titles.getElementsByTagName('a'); 

    for(i=0;i<links.length;i++){ 
     links[i].onclick = function(index){ 
      return function() { 
       alert(index); 
      } 
     }(i) 
    } 
}