2017-04-18 34 views
0

我正在尝试向放置在地图上的每个标记添加一个信息窗口。信息窗口仅显示最后添加的标记。我在这里尝试了其他解决方案,但没有一个工作。目前,我用下面的代码这样做:Google Maps API InfoWindow绑定到最后一个标记

(违规代码的注释//作业中,开始一半)

function placeMarker(data, map){ 
 
var lati, lngi, title, details; 
 
var image = 'image.png'; 
 

 
    for(i=0; i < data.length; i++){ 
 
    console.log(data[i].eventLocation + " OF TYPE " + data[i].eventType); 
 
    if(data[i].eventName != ""){ 
 
     title = data[i].eventName; 
 
    } 
 
    if(data[i].eventDetails != ""){ 
 
     details = data[i].eventDetails; 
 
    } 
 

 
     if(data[i].eventLocation == "Location 1"){ 
 
     lati = -29.651409; 
 
     lngi = 82.342909; 
 
     } 
 
     else if(data[i].eventLocation == "Location 2"){ 
 
     lati = -29.637712; 
 
     lngi = 82.368024; 
 
     } 
 
     else if(data[i].eventLocation == "Location 3"){ 
 
     lati = -29.650533; 
 
     lngi = 82.342684; 
 
     } 
 
     else{ 
 
     lati = -29.645793; 
 
     lngi = 82.347717; 
 
     console.log(data[i].eventLocation + " not found"); 
 
     } 
 
     // WORK IN PROGRESS 
 
     var infowindow = new google.maps.InfoWindow({ 
 
      content: details 
 
     }); 
 

 
     newMarker = new google.maps.Marker({ 
 
     position: {lat: lati, lng: lngi}, 
 
     title : title, 
 
     map: map, 
 
     icon: image, 
 
     details: details 
 
     }); 
 

 
     newMarker.addListener('click', function() { //needs some work to connect to each marker instead of last one placed 
 
      infowindow.open(map, newMarker); 
 
     }); 
 
    } 
 
} 
 

 
function initMap(data) { 
 
    var uluru = {lat: -29.643220, lng: 82.350427}; 
 
    var map = new google.maps.Map(document.getElementById('map'), { 
 
    zoom: 14, 
 
    center: uluru 
 
    }); 
 
// Marker Images 
 
    var centerMarker = new google.maps.Marker({ 
 
    position: {lat: -29.643894, lng: 82.354748}, 
 
    map: map, 
 
    icon: image3 
 
    }); 
 
    placeMarker(data, map); 
 
}

试图找到一个解决方案让我显示每个标记上输入的最后信息,但不显示相应标记的正确信息。 我改变了这本:

newMarker.addListener('click', function() { //needs some work to connect to each marker instead of last one placed 
 
      infowindow.open(map, newMarker); 
 
     });

google.maps.event.addListener(newMarker, 'click', function() { //needs some work to connect to each marker instead of last one placed 
 
      infowindow.open(map, this); 
 
     });

+0

作出变异le var newMarker = []在for循环之前,然后在for循环中用作newMarker [i] = new google.maps.Mar ......和newMarker [i] .addListene ....对infowindow也做同样的事情目前您的对象被覆盖 –

回答

0

尽我修改。我不能调试结束,但让我知道是否可行?如果没有,我想这会帮助你看到的的方式,我用迭代循环,然后填写空数组的所有标记信息,详细信息等,并附上事件地图..

var infoWindow = new google.maps.InfoWindow; 
    // open info window 
    var onMarkerClick = function() { 
    var marker = this; 
    infoWindow.setContent(marker.details); 
    infoWindow.open(map, marker); 
    mkmap.lastmarkeropened = marker; 
    }; 
    // close the info window 
    google.maps.event.addListener(map, 'click', function() { 
    infoWindow.close(); 
    }); 

    var marker = [] ; 
    // loop start 
    for(i=0; i < data.length; i++){ 
    console.log(data[i].eventLocation + " OF TYPE " + data[i].eventType); 
    if(data[i].eventName != ""){ 
     title = data[i].eventName; 
    } 
    if(data[i].eventDetails != ""){ 
     details = data[i].eventDetails; 
    } 

     if(data[i].eventLocation == "Location 1"){ 
     lati = -29.651409; 
     lngi = 82.342909; 
     } 
     else if(data[i].eventLocation == "Location 2"){ 
     lati = -29.637712; 
     lngi = 82.368024; 
     } 
     else if(data[i].eventLocation == "Location 3"){ 
     lati = -29.650533; 
     lngi = 82.342684; 
     } 
     else{ 
     lati = -29.645793; 
     lngi = 82.347717; 
     console.log(data[i].eventLocation + " not found"); 
     } 

     marker[ i ] = new google.maps.Marker({ 
     position: {lat: lati, lng: lngi}, 
     title : title, 
     map: map, 
     icon: image, 
     details: details 
     }); 

     // attach event to open info window 
     google.maps.event.addListener(marker[ i ], 'click', onMarkerClick); 
    } // end loop 

看看这个工程..

欢呼声,K

+0

工作很好!非常感谢您的帮助@oserk! – user2990

+0

有一个很好的人,很高兴我帮助:) –

+0

你必须把所有的内容放在你的'细节'标记..所以我想你可以改变一些东西:'details + = title;'和相同的位置:) –

1

尝试把它放在这样,你的循环之前定义此功能:

var assignListener = function(markerObj, infoWindowObj){ 
         return function() { 
           infoWindowObj.open(map, markerObj); 
           }; 
         }; 

然后通过该功能添加监听器:

newMarker.addListener('click', assignListener(newMarker, infowindow)); 
+0

我仍然从我第一次尝试的解决方案中获得相同的问题,现在信息窗口显示在每个引脚上;然而,最后输入的“详细信息”在每个引脚上,而不是它所属的唯一引脚 – user2990

+0

好的。请尝试编辑。 – dev8080

+0

这也适用!感谢您的帮助@ dev8080! – user2990

相关问题