2010-07-07 1 views
8

Also mein Code wie folgt aussieht, mehrere Marker:Google Maps Api v3 Trigger Problem, traf externer Link Infofenster

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); 

Wie kann ich das bekommen extern zu arbeiten?

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

Antwort

3

Um das Click-Ereignis auf eine der Markierungen auslösen, können Sie einfach tun:

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

aber es sieht aus wie Sie einige weitere Probleme in Ihrem Code haben, weil Sie Mischmethoden sind aus der v2 API und der v3 API. Beispielsweise sind die Methoden addOverlay() und openInfoWindowHtml() nicht in der API v3 vorhanden.

daher Ihr Code sollte wie folgt aussehen mit dem v3 API arbeiten:

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

Wenn Sie befassen sich mit einer großen Anzahl von Markern:

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

i eine große Anzahl von Markern haben auf meiner Karte - gibt es einen Weg um alle Marker zu einem separaten Array zu schieben? Wie können Sie allen Markern eine "id" -Eigenschaft zuweisen und irgendwie von dieser ID "bekommen"? ... oder mache ich mir Sorgen um nichts - schadet es den Ressourcen nicht, alle Marker zu einem Array hinzuzufügen ... – christian