循环问题

时间:2011-07-01 15:20:25

标签: javascript

  

可能重复:
  Javascript infamous Loop problem?

当一个mousemove事件被重新启动时,变量i等于所有扇区的最后一个值(在我的情况下= 4)。我可以在哪里存储i的价值?

for (var i = 0; i < pieChart.Sectors.length; i++) {
  pieChart.Sectors[i].mousemove(function (event) {
     var percent = (localData[i] * 100) / totalSum;
     pieChart.Popup(event.clientX, event.clientY, [percent, "% всего времени\n Было сделано", localData[i], "звонков"].join(' '));
  });
}

3 个答案:

答案 0 :(得分:1)

你需要一个关闭。请看这里的一个很好的解释:http://www.mennovanslooten.nl/blog/post/62

我将很快发布您修改的代码。

答案 1 :(得分:1)

回答了一千次,1001回答:您的事件处理函数将关闭而不是i变量。这意味着,所有函数都引用相同的变量,因此它们都具有相同的值。

解决方案:引入一个新函数(-context):

pieChart.Sectors[i].mousemove((function (myEvent) {
        return function() {
            var percent = (localData[i] * 100) / totalSum;
            // do something with "myEvent"
        };
}(event)));

答案 2 :(得分:0)

检查变量$i之前是否已被声明为全局变量。

您甚至可以随时使用alert(window.i);console.log(window.i);进行检查。