我似乎无法使标记的Google地图点击事件监听器起作用。唯一的细节是这是在一个循环中运行,这意味着我第一次包含地图并运行添加标记及其事件监听器,以下时间我有一个只添加标记和监听器的函数。 / p>
这是我的初始化函数,datasetRealtime是标记数组:
function initialize() {
var mapOptions = {
zoom: 14,
scaleControl: true,
scaleControlOptions: {
position: google.maps.ControlPosition.TOP_LEFT
},
/* Map Zoom */
center: new google.maps.LatLng(41.186968, -8.697792),
/*Center Coordinate*/
mapTypeId: google.maps.MapTypeId.ROADMAP
}
realtime_map = new google.maps.Map(document.getElementById("map-canvasBig"), mapOptions);
for (var i = 0; i < datasetRealtime.length; i++) {
var latitude = parseFloat(datasetRealtime[i]["latitude"]);
var longitude = parseFloat(datasetRealtime[i]["longitude"]);
var myLatlng = new google.maps.LatLng(latitude, longitude);
var marker = new google.maps.Marker({
position: myLatlng,
map: realtime_map,
title: 'Just some title'
});
google.maps.event.addListener(marker, 'click', function () {
console.log("it worked")
});
}
}
我正在加载它:
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://maps.googleapis.com/maps/api/js?key=mykeygoeshere&sensor=false&callback=initialize";
document.body.appendChild(script);
如果已经加载了地图,这是添加标记和侦听器的函数:
function addMarkers(){
for (var i = 0; i < datasetRealtime.length; i++) {
var latitude = parseFloat(datasetRealtime[i]["latitude"]);
var longitude = parseFloat(datasetRealtime[i]["longitude"]);
var myLatlng = new google.maps.LatLng(latitude, longitude);
var marker = new google.maps.Marker({
position: myLatlng,
map: realtime_map,
title: 'Just some title'
});
google.maps.event.addListener(marker, 'click', function () {
console.log("it worked")
});
}
}
更新 我在添加新标记之前清理标记: function clearOverlays(datasetRealtime){ for(var i = 0; i&lt; datasetRealtime.length; i ++){ datasetRealtime [I] .setMap(空); } datasetRealtime = []; }
我已经尝试了很多方法,即使有闭包,我似乎也无法使它工作。添加了标记,但是点击它们时没有处理程序(小手保持大开)
先谢谢大家。
答案 0 :(得分:0)
嗨下面的代码将用于标记点击也添加了small code .. sry无法查看你的代码完全仍提供有助于解决的信息..
var marker = new GMarker(location);
GEvent.addListener(marker, "click", function() {
alert('it works');
});
map.addOverlay(marker);
答案 1 :(得分:0)
问题可能是你在每个for循环中重写标记。 您必须将标记存储在markersArray对象中。
您的代码将如下所示:
var markers = [];
function addMarkers(){
for (var i = 0; i < datasetRealtime.length; i++) {
var latitude = parseFloat(datasetRealtime[i]["latitude"]);
var longitude = parseFloat(datasetRealtime[i]["longitude"]);
var myLatlng = new google.maps.LatLng(latitude, longitude);
var marker = new google.maps.Marker({
position: myLatlng,
map: realtime_map,
title: 'Just some title'
});
google.maps.event.addListener(marker, 'click', function () {
console.log("it worked")
});
markers.push(marker);
}
}
那可能有用!
我可以建议您进行代码重构:因为您已经有了一个addMarkers方法,所以在初始化方法中调用它比在那里重写相同的代码更简单。