如何在特定于标记的信息窗口中显示内容?

时间:2012-03-08 23:06:16

标签: google-maps-api-3 google-maps-markers

我根据搜索结果创建了带有标记数量的谷歌地图(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);
                    });

5 个答案:

答案 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变量。