2011-03-22 62 views
0

我試圖找出一個簡單的問題的範圍和/或點擊收聽:問題與在Javascript/jQuery的

var setListeners = function() 
     { 
      for(var i in sliders) 
      { 
       sliders[i].switchBtn.click(function() 
       { 
        alert(i); 
       }); 
      } 
     } 

有在滑塊三種元素,所以3個switchBtn的給出了一個點擊監聽。我預計點擊第一個按鈕會以'0',第二個'1'和第三個'2'進行提醒。但是,當我按下每個按鈕時,我只會得到'2'。

難道有人請指出爲什麼我的價值被重寫爲每個新的偵聽器功能?

回答

0

,因爲我是在功能之外,你總是引用相同的變量,它總是2.你需要一個封閉得到這個正常工作:

sliders[i].switchBtn.click((function(n){ 
    return function(){ 
     alert(n); 
    } 
})(i)); 

N(爲我)現在綁定在關閉並且您的警報將正確顯示。

+0

美容感謝隊友。 – Chris 2011-03-22 05:13:51

2

使用閉包,所以內部i不總是綁定到外部作用域(這將是循環結尾的最後一個值)。

這裏i的值被設置爲j

var setListeners = function() 
    { 
     for(var i in sliders) 
     { 
      sliders[i].switchBtn.click((function(j) 
      { 
       return function() { alert(j) }; 
      })(i); 
     } 
    } 

jsFiddle

+0

哇,你認真的編輯了你的文章,你首先(和不正確地)複製我的性格爲字符?哇... – 2011-03-22 05:09:11

+0

@cwolves不,實際上,我是在jsFiddle上測試它,相似性是我向你保證的巧合。我以前幾次回答過這種類型的問題,所以不要假設,因爲我使用了類似的代碼,我偷了它。 – alex 2011-03-22 05:10:01

+0

k,對不起。時機是剛剛壞了,因爲你在我發佈後立即編輯:) – 2011-03-22 05:11:24