Google Maps V3 Javascript:未加载事件侦听器

时间:2013-11-15 12:32:42

标签: javascript google-maps-api-3 javascript-events event-handling

我似乎无法使标记的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 = [];         }

我已经尝试了很多方法,即使有闭包,我似乎也无法使它工作。添加了标记,但是点击它们时没有处理程序(小手保持大开)

先谢谢大家。

2 个答案:

答案 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方法,所以在初始化方法中调用它比在那里重写相同​​的代码更简单。