Я пытаюсь создать цикл для создания множества функций, так что когда пользователь нажимает кнопку большого пальца вверх, он запускает правильный .php-документ. Он отлично работает, когда я удаляю цикл и просто предоставляю var ia конкретное число, но как только я пытаюсь сделать его в цикле, в оповещении (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; }); }
Это классическая проблема: к моменту вызова ваших обратных вызовов i
имеет значение конца цикла.
Вот как вы можете это исправить:
var i=1; while ( ++i < 10 ) { (function(i){ // your current code })(i); }
Он работает, потому что внутренняя функция создает область, когда она вызывается, и эта область содержит значение i
вы хотите.
Вы должны передать значение 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); }