0

我有一段代码将 Bing 地图集成到 jQuery Mobile 框架中,如果不是每个标记中显示的文本,事情运行良好

标记显示在正确的位置,但是文本似乎更改为最后生成的标记之一

这是我的代码

for (var i = 0; i < locations.length; i++)
{
  marker_description = locations[i].description;
      marker_title = locations[i].title;
  var self = this;


  self.addMarker({'location': locations[i].lat +','+locations[i].long, 'bounds' : true })
  .click(function() {
      self.openInfoWindow({
        'title': marker_title,
        'description': marker_description
      }, this);
  });
}

所以问题是当我点击每个标记时,打开的弹出窗口显示循环最后一项的值。

4

1 回答 1

2

当你定义的回调被调用时,你的变量已经改变了。

您可以通过立即执行的闭包来保护它们,如下所示:

for (var i = 0; i < locations.length; i++) {
   (function(i){
      var marker_description = locations[i].description; // be careful to use local variables
      var marker_title = locations[i].title;
      var self = this;
      self.addMarker({'location': locations[i].lat +','+locations[i].long, 'bounds' : true })
      .click(function() {
          self.openInfoWindow({
            'title': marker_title,
            'description': marker_description
          }, this);
      });
  })(i);
}

请注意var我添加以使变量本地化。

于 2013-02-21T16:59:39.467 回答