7

我正在处理一个页面,该页面使用 Javascript httpObject 获取代码并使用它来更新页面上的两个元素 - 谷歌地图和列出标记指向的事物的 DIV。

那一点效果很好。问题是,当我创建标记时,我通过一个 for 循环来完成,并在每个循环中将侦听器添加到标记中。然后,当我测试页面时,我发现每个标记都会发生同样的事情。

将鼠标悬停在标记上应更改 DIV 相应位的边框颜色。相反,每个标记都会更改最后一位的边界。似乎每次添加侦听器时,我都会覆盖先前添加的标记的侦听器。

我知道这与 Google Maps API 保留标记的身份有关,即使您在 Javascript 中创建新标记也是如此。我不明白如何解决它-我尝试在循环外创建一个数组,然后更改

var newMarker = new GMarker(newLatLng);

使用 newMarker[count] = new GMarker(newLatLng);

但它仍然不起作用。

帮助我,StackOverflow。你是我唯一的希望。:)

编辑:更多代码

for (count=0;count<=LatArray.length;count++)
{
  thisLat = LatArray[count];
  thisLong = LongArray[count];
  thisHTML = HTMLArray[count];
  newLatLng = new GLatLng(thisLat, thisLong, true);

  if (mapBounds.containsLatLng(newLatLng))
  {
      //alert(count);
      var  dinnerNumber = "dinner_"+count;
      newMarkers[count] = new GMarker(newLatLng); 
      map.addOverlay(newMarkers[count]);
      GEvent.addListener(newMarkers[count],'mouseover',function(){document.getElementById(dinnerNumber).style.borderColor = '#000000';
  });
}// for
4

2 回答 2

7

关闭问题——所有这些听众共享同一个dinnerNumber 变量。试试这个:

GEvent.addListener(newMarkers[count], 'mouseover', (function(dinnerNumber){ return function(){document.getElementById(dinnerNumber).style.borderColor = '#000000';}; })(dinnerNumber));

这样,每个侦听器都使用其自己的晚餐数字的封闭副本创建。

于 2009-08-03T00:05:40.680 回答
1

你必须仔细阅读

GEvent.addListener(newMarkers[count], 'mouseover', 
       (function(dinnerNumber)
          { return function()
                { document.getElementById(dinnerNumber).style.borderColor = '#000000';};        
          }
      )(dinnerNumber)
);

你错过了一个();

第三个参数是 (function(var){return function(){//what you want wirh var;};})(var)

于 2010-02-22T14:25:18.547 回答