关于javascript:for循环中未捕获的TypeError

Uncaught TypeError inside for loop

本问题已经有最佳答案,请猛点这里访问。

我有一个对象数组(播放器),这些对象有一个方法increment,它增加了一个对象变量。

for循环中,当我打电话时
players[x].increment();我收到以下错误:

intex.html:56 Uncaught TypeError: Cannot read property 'increment' of
undefined

1
2
3
4
5
6
7
8
9
10
11
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('' + players[x].name + 'WINS!!!');
        };
    });
};

当我在循环外调用例如players[0].increment();时,我没有任何问题。

如果不清楚。 我有一个带有两个按钮的简单页面。 根据我按下的按钮,它会递增,并显示变量。

当我在increment部分使用console.log(var)时,我得到2,但players[2]不存在,所以我认为这是问题,但我不确定或如何解决它。


当click事件被触发时,你的迭代器等于players.length,然后click处理程序使用该迭代器来尝试访问超出你的player数组范围的索引。

尝试在您的按钮上添加一个索引属性,如下所示:

1
2
3
4
5
6
7
<button class="player-button" data-player-index="0">Increment</button>
<button class="player-button" data-player-index="1">Increment</button>

$('.player-button').click(function() {
    var index = $this.attr('data-player-index');
    players[index].increment();
});