2013-02-12 69 views
-1

我非常感谢本次论坛的帮助。 所以我即将在地图上带来不同组的标记,并且 也使用了切换功能,这些功能完全正常。infowindows无法打开(GoogleMaps API v3)

什么不工作了我的eventlisteners打开标记信息窗口。

当我运行下面的代码,并敲击其中一个标记, 它总是弹出我阵列中最后一个标记的信息窗口。 所以这个机制起作用了,但似乎没有迭代了。

我想了很多关于这个问题,但我没有得出结论。 感谢您的帮助。

下面是代码

var deutschland = new google.maps.LatLng(51,9); 


function initialize(){ 

    var mapOptions = { zoom: 6, 
        center: deutschland, 
        streetViewControl: true, 
        scaleControl: true, 
        mapTypeControl: true, 
        mapTypeId: google.maps.MapTypeId.ROADMAP } 


var map = new google.maps.Map(document.getElementById("map-container"),mapOptions); 


lat_data = [ 

['mid',50.0010400,9.0730700,'company1','marker.png','infowindow text 1'], 
['mid',50.2010057,8.2592738,'company2','marker.png','infowindow text 2'], 
['West',50.7430120,7.1264100,'company3','marker_green.png','infowindow text 3'], 
    .... 

]; 



    markers = []; 
    var i, newMarker; 

    for (i = 0; i < lat_data.length; i++) { 

    var infowindow = new google.maps.InfoWindow({ 
     content: lat_data[i][5] 
    }); 


var shadow = new google.maps.MarkerImage('http://maps.google.com/mapfiles/shadow.png, 
    new google.maps.Size(37,32), 
    new google.maps.Point(0,0), 
    new google.maps.Point(0,32)); 

var image = 
new google.maps.MarkerImage('http://maps.google.com/mapfiles/'+lat_data[i][4], 
    new google.maps.Size(20,32), 
    new google.maps.Point(0,0), 
    new google.maps.Point(0,32)); 

newMarker = new google.maps.Marker({ 
    position: new google.maps.LatLng(lat_data[i][1], lat_data[i][2]), 
    map: map, 
    title: lat_data[i][3], 
    icon: image, 
    shadow: shadow 
}); 

newMarker.category = lat_data[i][0]; 
newMarker.setVisible(true); 

    google.maps.event.addListener(newMarker,'click',function(){ 
    infowindow.open(map,newMarker); 

    }); 
    google.maps.event.addListener(map,'click',function(){ 
     infowindow.close(map,newMarker); 
    }); 

markers.push(newMarker); 
} 

} 

function displayMarkers(category) { 
    var i; 

for (i = 0; i < markers.length; i++) { 
    if (markers[i].category == category) { 
    if (markers[i].getVisible()) { 
      markers[i].setVisible(false); } 

    else { markers[i].setVisible(true); } } } 
+0

请使用搜索,这个问题已经回答了真正经常 – 2013-02-12 22:21:38

+0

不同的问题,以同一个项目,我同意Dr.Molle – user1953346 2013-02-13 10:15:27

回答

0

现在我回答我的问题(非常酷,我从来没有这样做!)

据mozilla.org的闭包我写的教程下面的代码:

....... 
iw = new google.maps.InfoWindow({ 
     content: lat_data[i][5] 
    }); 

    function make_open_event_callback(iw){ 
     return function(){ 
      iw.open(map,this); 
     }; 
    } 
    function make_close_event_callback(iw){ 
     return function(){ 
      iw.close(map,this); 
     }; 
    } 

    google.maps.event.addListener(newMarker,'click',make_open_event_callback(iw)); 
    google.maps.event.addListener(map,'click',make_close_event_callback(iw)); 

markers.push(newMarker);