У меня есть массив объектов (игроков), и у этих объектов есть метод increment
, который увеличивает объектную переменную.Uncaught TypeError for for loop
Внутри for
петли, когда я называю players[x].increment();
я получаю следующее сообщение об ошибке:
intex.html:56 Uncaught TypeError: Cannot read property 'increment' of undefined
for (var x = 0; x < players.length; x++) {
$("#button-" + x).click(function() { //I select one of the buttons
players[x].increment(); //Here is the problem
//This part forwards doesn't matter
$("#score-" + x + "-n").text(players[x].score);
if (players[x].score >= 10) {
alert(players[x].name + " WINS!");
$("#alertz").html('<div class="alert alert-info" style="text-align:center;" >' + players[x].name + 'WINS!!!</div>');
};
});
};
Когда я звоню, например players[0].increment();
вне цикла, у меня нет никаких проблем.
Если это непонятно. У меня есть простая страница с двумя кнопками. На основе какой кнопки я нажимаю, она увеличивается и отображает переменную.
Когда я использую console.log(var)
в increment
части, я получаю 2, но players[2]
не существует, так что я думаю, что это проблема, но я не знаю точно, или как это исправить.
Возможный дубликат [добавления «нажмите» слушателей событий в цикле] (http://stackoverflow.com/questions/8909652/adding- click-event-listeners-in-loop) или, возможно, даже лучше: http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example – Teemu
Когда вы нажимаете на кнопку, 'x' равно' players.length', что больше, чем количество объектов 'player'. Вы должны «привязать» x к функции, ссылаясь таким образом, будет производить только последнее значение «x» для всех событий кликов. –
Вам не нужно иметь событие click в цикле. Это не правильно – bipen