我正在开发一个页面,该页面使用Javascript httpObject获取代码并使用它来更新页面上的两个元素 - 一个谷歌地图,以及一个列出标记指向的东西的DIV。
这一点工作正常。问题是,当我创建标记时,我通过for循环执行此操作,并在每个循环中向标记添加侦听器。然后,当我测试页面时,我发现每个标记都会发生同样的事情。
将鼠标悬停在标记上应更改DIV相应位的边框颜色。相反,每个标记都会更改最后一位的边框。似乎每次添加监听器时,我都会覆盖先前添加的标记的监听器。
我知道即使您在Javascript中创建新标记,Google Maps API也会保留标记的标识。我不知道如何解决它 - 我尝试在循环外创建一个数组,并更改
var newMarker = new GMarker(newLatLng);
与 newMarker [count] =新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
答案 0 :(得分:7)
关闭问题 - 所有这些侦听器共享相同的dinnerNumber变量。试试这个:
GEvent.addListener(newMarkers[count], 'mouseover', (function(dinnerNumber){ return function(){document.getElementById(dinnerNumber).style.borderColor = '#000000';}; })(dinnerNumber));
这样,每个监听器都创建了自己的DinnerNumber的封闭副本。
答案 1 :(得分:1)
你必须仔细阅读
GEvent.addListener(newMarkers[count], 'mouseover',
(function(dinnerNumber)
{ return function()
{ document.getElementById(dinnerNumber).style.borderColor = '#000000';};
}
)(dinnerNumber)
);
你错过了一个();
3-rd参数是(function(var){return function(){//你想要什么wirh var;};}}(var)