我正在开发一个使用 google maps api 的小型 webapp。
有一次,我想放置标记并将事件侦听器附加到它。
//initialization of infowindow and markers
var points = [];
var infowindow = new google.maps.InfoWindow({
content: "1234"
});
function addInfoWindow(point){
infowindow.setContent(point.position + " " + point.title),
infowindow.open(map, point);
}
这是问题,当我启动标记时
//initialize markers
{% for marker in mapMarkers %}
points[{{ marker.id }}] = new google.maps.Marker({
position: new google.maps.LatLng({{ marker.geometry.y }},
{{ marker.geometry.x }}),
map: map,
title: '{{ marker.name }}',
clickable: true
});
//add event llistener for infowindow
points[{{ marker.id }}].content = "abc"
//look here!!
google.maps.event.addListener(points[{{ marker.id }}], 'click',
addInfoWindow(points[{{ marker.id }}])
);
{% endfor %}
它会立即显示第一个标记的信息窗口。放置了其他标记,但单击它们不会产生任何变化。
虽然如果我这样做
google.maps.event.addListener(points[{{ marker.id }}], 'click',
function(){
addInfoWindow(points[{{ marker.id }}])
});
东西工作得很好,信息窗口只在点击标记时出现。
我的问题:为什么需要使用
功能(){}而不是直接使用 addInfoWindow。我认为这可能是 addInfoWindow 调用全局变量的函数调用问题,但如果是这种情况,显示的信息窗口应该显示来自最后一个标记实例化的信息,对吧?