2017-10-07 51 views
0

我有這段代碼。出於某種原因,第一個console.log會在控制檯中打印出來,但第二個單擊時會給我一個未定義的內容。 CVS數組是全局的。 感謝您的幫助jquery點擊函數裏面的for循環

var losotro = ['div.santiago', 'div.karina', 'div.roman', 'div.marcos']; 
var cvs = ['div#cv0 p', 'div#cv1 p', 'div#cv2 p', 'div#cv3 p']; 
    for (i = 0; i < losotro.length; i++) { 
     console.log(cvs[i]); 
     jQuery(losotro[i]).click(function(){ 
      console.log(cvs[i]);  
    }); 
} 

回答

0

這是JavaScript中的典型關閉問題。基本上,所有的回調(點擊事件處理程序)都引用相同的變量i(我知道,這對我來說也很奇怪),在循環結束時應該是losotro.length。並且 絕對不在losotro陣列的索引範圍之內。

您可能想要檢查閉包在JavaScript中的工作方式。但對於目前的問題,你可以這樣做。

var cvs = ['div#cv0 p', 'div#cv1 p', 'div#cv2 p', 'div#cv3 p']; 
for (i = 0; i < losotro.length; i++) { 
    console.log(cvs[i]); 
    var bindedFunc = (function(i) { 
     return function() { 
     console.log(i) 
     } 
    })(i) 
    jQuery(losotro[i]).click(bindedFunc); 
}