Lee*_*ald 5 javascript google-maps
我有一些Google Maps/Javascript问题.我想我知道问题是什么,但只是不知道绕道而行.
我的问题的一个例子是在这里.无论你点击什么标记,第二个出现.我显然将错误的信息传递给我的事件监听器,但我似乎无法正确获取代码.这是代码的缩减部分:
首先,这是我的一部分代码:
if (GBrowserIsCompatible() && mapResults != null) {
// Read in the JSON
var mapDetailsArray = loadJSON();
// Create a map
var map = new google.maps.Map2(document.getElementById(elementId));
map.setCenter(new google.maps.LatLng(mapDetailsArray[0].getLatitude(),
mapDetailsArray[0].getLongitude()), 13);
map.addControl(new google.maps.SmallMapControl());
// Add the points and center
var mgr = new google.maps.MarkerManager(map);
var bounds = new google.maps.LatLngBounds();
for ( var i = 0; i < mapDetailsArray.length; i++) {
var mapDetails = mapDetailsArray[i];
var point = new google.maps.LatLng(mapDetails.getLatitude(), mapDetails
.getLongitude());
bounds.extend(point);
// Create our marker
var marker = new google.maps.Marker(point);
// What action do we use to show the hover
var infoAction = "mouseover";
marker.value = mapDetails;
google.maps.Event.addListener(marker, infoAction, function() {
alert(marker.value);
map.openInfoWindowHtml(point, getResultInfoContent(marker.value));
});
mgr.addMarker(marker, 1);
}
mgr.refresh();
}
Run Code Online (Sandbox Code Playgroud)
"marker.value"总是最终设置为mapDetails的最后一个值.如果有的话,我希望它一旦循环结束就"未定义",那么这个价值不应该消失吗?我已经尝试了各种不同的值(例如marker.value = i + 1;)但它仍将作为两个点的相同值.
有谁知道如何将正确的值传递给事件监听器?
改变这个:
google.maps.Event.addListener(marker, infoAction, function() {
alert(marker.value);
map.openInfoWindowHtml(point, getResultInfoContent(marker.value));
});
Run Code Online (Sandbox Code Playgroud)
对此:
google.maps.Event.addListener(marker, infoAction, (function(marker, point, map) { return function() {
alert(marker.value);
map.openInfoWindowHtml(point, getResultInfoContent(marker.value));
}})(marker, point, map));
Run Code Online (Sandbox Code Playgroud)
这将创建您想要的闭包.
为清楚起见拆分:
var f = function(marker, point, map)
{
return function()
{
alert(marker.value);
map.openInfoWindowHtml(point, getResultInfoContent(marker.value));
}
}
google.maps.Event.addListener(marker, infoAction, f(marker, point, map));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4136 次 |
| 最近记录: |