2010-07-07 15 views
8

Así que mi código es el siguiente, múltiples marcadores:tema gatillo v3 API de Google Maps, enlace externo golpeó ventana de información

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

¿Cómo puedo conseguir que esto funcione externamente?

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

Respuesta

3

para activar el evento click en uno de los marcadores, sólo tiene que hacer:

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

Sin embargo, parece que tiene algunos problemas adicionales en su código, porque estás métodos de mezcla desde v2 API y v3 API. Por ejemplo, los métodos addOverlay() y openInfoWindowHtml() no existen en la API v3.

Por lo tanto, el código debe ser algo como esto funcione con la versión 3 del 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

Si usted trata con un gran número de marcadores:

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

Tengo un gran número de marcadores en mi mapa - ¿hay alguna manera de empujar todos los marcadores a una matriz separada? Al igual que se puede asignar a todos los marcadores una propiedad 'id', y de alguna manera 'obtener' por esa identificación? ... o me preocupo por nada, ¿no es una gran pérdida de recursos agregar todos los marcadores a una matriz ... – christian

Cuestiones relacionadas