2010-07-07 63 views
8

所以我的代码看起来像这样,多个标记:谷歌地图API V3触发问题,外部链接打到信息窗口

var m1 = new google.maps.Marker(
    new google.maps.LatLng(35.2602340, -93.7939480), 
    {icon:tinyIcon,bouncy:1} 
); 

google.maps.Event.addListener(m1, "click", function() { 
    m1.openInfoWindowHtml( 
     '1<br />test,TX' 
    ); 
}); 

map.addOverlay(m1); 

var m2 = new google.maps.Marker(
    new google.maps.LatLng(35.2810510, -93.8246510), 
    {icon:tinyIcon,bouncy:1} 
); 

google.maps.Event.addListener(m2, "click", function() { 
    m2.openInfoWindowHtml(
     'test<br />test,Texas' 
    ); 
}); 

map.addOverlay(m2); 

我如何能得到这个工作外部?

href="google.maps.Event.trigger(1, 'click');">Something</> 

回答

3

要触发click事件上的标记之一,你可以简单地做:

<a href="javascript:google.maps.event.trigger(m1, 'click');">Trigger Click on m1</a> 

但是,它看起来像你有你的代码中的一些进一步的问题,因为你是混合方法来自v2 APIv3 API。例如,v3 API中不存在addOverlay()openInfoWindowHtml()方法。

因此,你的代码应该看起来像这样与v3的API工作:

var map = new google.maps.Map(document.getElementById("map"), { 
    zoom: 11, 
    center: new google.maps.LatLng(35.26, -93.80), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 

// You only need one InfoWindow object 
var infowindow = new google.maps.InfoWindow(); 

// Create the markers, and keep a reference to them 
var m1 = new google.maps.Marker({ 
    position: new google.maps.LatLng(35.2602340, -93.7939480), 
    map: map 
}); 

var m2 = new google.maps.Marker({ 
    position: new google.maps.LatLng(35.2810510, -93.8246510), 
    map: map 
}); 

// Add the events listeners on the markers 
google.maps.event.addListener(m1, 'click', function() { 
    infowindow.setContent('1<br />test,TX'); 
    infowindow.open(map, m1); 
}); 

google.maps.event.addListener(m2, 'click', function() { 
    infowindow.setContent('test<br />test,Texas'); 
    infowindow.open(map, m2); 
}); 
3

如果你处理大量的标记:

var map; 
var markers = []; // declared EXTERNALLY (and m1 and m2 in the examples above) 

function setupMarkers() { 

    var markersLayer = new Array(); 
    markersLayer = [ 
     [52.26326, 21.673675], // marker #0 
     [52.67328, 21.865789], // marker #1 
     [52.34366, 21.348797] // marker #2 etc. 
    ]; 

    for (var i = 0; i < markersLayer.length; i++) { 
    // or: for (var i in markersLayer) { 
     var myLatLng = new google.maps.LatLng(markersLayer[i][0], markersLayer[i][1]); 
     var marker = new google.maps.Marker({..., position: myLatLng, ...}); 
     google.maps.event.addListener(marker, 'click', function() {...}); 
     markers.push(marker); 
    } 

} 

function initialize() { 
    ... 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    ... 
    setupMarkers(); 
} 

function launchInfoWindow(x) { 
    // window.scroll(0, 0); 
    // markers[x].setMap(map); 
    google.maps.event.trigger(markers[x], "click"); 
} 

HTML: 
<a href="javascript:launchInfoWindow(2);">...</a> 
+0

我有标记的大量在我的地图上 - 是否有任何方法将所有标记推送到单独的数组?就像你能分配所有标记'id'属性,并以某种方式'获得'通过该ID? ...或者我担心什么都没有 - 它是否会耗尽资源将所有标记添加到数组中... – christian 2012-09-18 22:18:46