我正在尝试创建一个循环来创建许多函数,以便当用户单击拇指向上按钮时,它会运行正确的.php文档。当我删除循环并且只给var i一个特定的数字时,它工作得很好但是一旦我尝试将它变成一个循环,在警报(i)我在第一个循环得到10。
var i=1;
while ( ++i < 10 ) {
$('#thumbup' + i).click(function() {
var userid = $('#theuser' + i).text();
var url = "_thumbup.php?userid=" + userid;
//alert(url);
$('#thumbup' + i).hide();
$('#thumbdown' + i).hide();
$("#toggle").css("display","block");
alert(i); // Give me 10 on first loop?!?
// get the URL
http = new XMLHttpRequest();
http.open("GET", url, true);
http.send(null);
// prevent form from submitting
return false;
});
}
答案 0 :(得分:9)
这是一个经典问题:当你的回调被调用时,i
具有循环结束的值。
以下是解决问题的方法:
var i=1;
while ( ++i < 10 ) {
(function(i){
// your current code
})(i);
}
它的工作原理是因为内部函数在调用时会创建一个范围,并且此范围包含您想要的i
值。
答案 1 :(得分:2)
你必须将i的值传递给你的回调。 试试这个:
var i=1;
while ( ++i < 10 ) {
(function(i){
$('#thumbup' + i).click(function() {
var userid = $('#theuser' + i).text();
var url = "_thumbup.php?userid=" + userid;
//alert(url);
$('#thumbup' + i).hide();
$('#thumbdown' + i).hide();
$("#toggle").css("display","block");
alert(i); // Give me 10 on first loop?!?
// get the URL
http = new XMLHttpRequest();
http.open("GET", url, true);
http.send(null);
// prevent form from submitting
return false;
});
})(i);
}