我根据搜索结果创建了带有标记数量的谷歌地图(api v3)。当我点击一个标记时,它会打开一个信息窗口。让infowindow显示与其标记相关的信息的最佳方法是什么?与所有标记相关的信息位于我从ajax请求中收到的json对象中。
for (i=0; i < result.point.length; i++) {
var latLng = new google.maps.LatLng(result.proint[i].Latitude,result.point[i].Longitude);
var marker = new google.maps.Marker({
position: latLng,
title: i.toString()
//map: map
});
markersArray.push(marker);
var infowindow = new google.maps.InfoWindow({
content: 'specific information associated to the marker clicked'
});
google.maps.event.addListener(markersArray[i], 'click', function(event) {
infowindow.open(map, this);
});
答案 0 :(得分:6)
按照上面的建议只创建1个infoWindow。
标记内的内容存储:
var marker = new google.maps.Marker({
position: latLng,
title: i.toString(),
//set your content here
content:'your specific content'
//map: map
});
窗口打开:
google.maps.event.addListener(markersArray[i], 'click', function(event) {
infoWindow.setContent(this.content);
infowindow.open(map, this);
});
答案 1 :(得分:2)
首先,您应该将forWoutow的创建移出for循环。
接下来,更改将click事件附加到此处的位置:
google.maps.event.addListener(markersArray[i], 'click', function(content) {
return function(event){
infowindow.setContent(content);
infowindow.open(map, this);
}
}(WHATEVER_THE_CONTENT_SHOULD_BE_FOR_THIS_MARKER));
您想使用此而不是标记。 此将引用事件发生的对象,而标记将引用最后创建的标记。
答案 2 :(得分:0)
你的例子中有一些拼写错误(proint)在你的循环顶部:
for (i=0; i < result.point.length; i++) {
var info_window_content = result.point[i].Latitude + '<br />';
info_window_content += result.point[i].Longitue + '<br />';
// etc for any value in you json object
// create your marker as is.
...
var infowindow = new google.maps.InfoWindow({
content: info_window_content
});
// etc, etc.
您需要像往常一样为每个标记添加一个eventListener。我没有看到任何问题。 除了我使用infoWindow.open(map,marker)与此相比。
可能有一种更有效的方法,即在infoWindow.open()之后; infoWindow.setContent(info_window_content)
答案 3 :(得分:0)
尝试这个,它的确有效,我已经测试了它
// Add markers
for (i=0; i < result.point.length; i++) {
var latLng = new google.maps.LatLng(result.proint[i].Latitude, result.point[i].Longitude);
var marker = new google.maps.Marker({
position: latLng,
title: i.toString()
//map: map
});
// marker info start
var infowindow = new google.maps.InfoWindow();
(function (marker, result.point[i]) {
// add click event
google.maps.event.addListener(marker, 'click', function() {
var infoContent: "specific information associated to the marker clicked"
});
infoWindow.setContent(infoContent);
infowindow.open(map, marker);
});
// selected marker 4 infowindow
(marker, result.point[i]);
markersArray.push(marker);
}
答案 4 :(得分:-1)
不完全确定你要做的是什么。您要加载的位置/内容是什么?
google.maps.event.addListener(marker, 'click', (function(event, index) {
return function(){
infowindow.content = markersArray[index].yourcontent;
// or
infowindow.content = yourcontentarray[index];
infowindow.open(map,this);
}
})(marker,i));
确保在函数之外声明标记和infowindow变量。