2017-10-07 50 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); 
}