2009-08-02 60 views
6

我正在使用Javascript httpObject获取代码的页面,并使用它来更新页面上的两个元素 - 谷歌地图和列出标记指向的东西的DIV 。向Google地图标记动态添加听众

这位工作正常。问题是,当我创建标记时,我通过for循环来完成,并且在每个循环中将侦听器添加到标记中。然后,当我测试页面时,我发现每个标记都会发生同样的情况。

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

我知道这是为了处理Google Maps API保留标记的身份,即使您在Javascript中创建新标记时也是如此。我不明白怎么去解决它 - 我试图创建循环外的数组,并改变

var newMarker = new GMarker(newLatLng); 

与 newMarker [统计] =新的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 
+1

+1引用星球大战(非垃圾一个) – karim79 2009-08-02 22:40:44

+0

我们可以有更大的代码示例吗?很难分辨出问题所在。 – karim79 2009-08-02 22:48:17

回答

6

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

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

这样,每个监听器都是用自己的dinnerNumber封闭副本创建的。

1

你必须仔细阅读

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

你错过了();

的3挡的参数是(函数(VAR){返回功能(){//你想要什么wirh VAR;};})(VAR)