Google maps api 3 加载地图后google.maps.event.trigger未触发

Google maps api 3 加载地图后google.maps.event.trigger未触发,google-maps-api-3,Google Maps Api 3,我有一个谷歌地图,当dragend和zoom\u发生变化时,它会更新地图上的所有标记。除了地图的初始加载之外,所有的工作都在进行中。地图加载后,它是空的。在initialize() initialize = function() { mapOptions = { center: { lat: 51, lng: 0 }, zoom: 9 }; map = new google.maps.Map(document.getElementById('map-canvas'),

我有一个谷歌地图,当
dragend
zoom\u发生变化时,它会更新地图上的所有标记。除了地图的初始加载之外,所有的工作都在进行中。地图加载后,它是空的。在
initialize()

initialize = function() {
  mapOptions = {
    center: { lat: 51, lng: 0 },
    zoom: 9
  };
  map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
  map.setCenter(new google.maps.LatLng(51,0));
  google.maps.event.addListener(map, 'zoom_changed', dealWithNewWindow);
  google.maps.event.addListener(map, 'dragend', dealWithNewWindow);
  function dealWithNewWindow(event) {
    killAllMarkers();
    var bounds = map.getBounds();
    var nelat = bounds.getNorthEast().lat();
    var swlat = bounds.getSouthWest().lat();
    var nelng = bounds.getNorthEast().lng();
    var swlng = bounds.getSouthWest().lng();
    var mapBounds = {NElatitude:nelat, SWlatitude:swlat, NElongitude:nelng, SWlongitude:swlng};
    $.ajax({
      type     : 'POST',
      url      : '/maprequest',
      dataType : 'script',
      data     :  {  NElatitude:nelat, SWlatitude:swlat, NElongitude:nelng, SWlongitude:swlng }
    });
  };
  google.maps.event.trigger(map, 'dragend');
};

google.maps.event.addDomListener(window, 'load', initialize);
编辑:


我已经对这个问题作了一些阐述。页面刷新后,javascript在dealWithNewWindow中的这一行停止:
var nelat=bounds.getNorthEast().lat()。由于某些原因,当映射边界随后更改时,此代码运行正常,但在第一次加载映射时失败。

映射dragend事件的触发器不在初始化函数的末尾。它不属于任何一种功能。你有一个无关的
}在代码末尾

我建议通过JSLint来运行它

这是原件,修改了缩进并添加了一些注释,以使函数开始和结束的位置更加明显:

initialize = function() {
    mapOptions = {
        center: {
            lat: 51,
            lng: 0
        },
        zoom: 9
    };
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    map.setCenter(new google.maps.LatLng(51, 0));
} // end of initialize function

// not in any function:
google.maps.event.addListener(map, 'zoom_changed', dealWithNewWindow);
google.maps.event.addListener(map, 'dragend', dealWithNewWindow);

function dealWithNewWindow(event) {
    killAllMarkers();
    var bounds = map.getBounds();
    var nelat = bounds.getNorthEast().lat();
    var swlat = bounds.getSouthWest().lat();
    var nelng = bounds.getNorthEast().lng();
    var swlng = bounds.getSouthWest().lng();
    var mapBounds = {
        NElatitude: nelat,
        SWlatitude: swlat,
        NElongitude: nelng,
        SWlongitude: swlng
    };
    $.ajax({
        type: 'POST',
        url: '/maprequest',
        dataType: 'script',
        data: {
            NElatitude: nelat,
            SWlatitude: swlat,
            NElongitude: nelng,
            SWlongitude: swlng
        }
    });
}; // end of dealWithNewWindow function

// not in any function:
google.maps.event.trigger(map, 'dragend');

};  // erroneous closing };

google.maps.event.addDomListener(window, 'load', initialize);
这里有一个版本,有一些小的修改,我想应该可以修正你的错误

initialize = function() {
    mapOptions = {
        center: {
            lat: 51,
            lng: 0
        },
        zoom: 9
    };
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    map.setCenter(new google.maps.LatLng(51, 0));

    google.maps.event.addListener(map, 'zoom_changed', dealWithNewWindow);
    google.maps.event.addListener(map, 'dragend', dealWithNewWindow);

    google.maps.event.trigger(map, 'dragend');
};

function dealWithNewWindow(event) {
    killAllMarkers();
    var bounds = map.getBounds();
    var nelat = bounds.getNorthEast().lat();
    var swlat = bounds.getSouthWest().lat();
    var nelng = bounds.getNorthEast().lng();
    var swlng = bounds.getSouthWest().lng();
    var mapBounds = {
        NElatitude: nelat,
        SWlatitude: swlat,
        NElongitude: nelng,
        SWlongitude: swlng
    };
    $.ajax({
        type: 'POST',
        url: '/maprequest',
        dataType: 'script',
        data: {
            NElatitude: nelat,
            SWlatitude: swlat,
            NElongitude: nelng,
            SWlongitude: swlng
        }
    });
};

google.maps.event.addDomListener(window, 'load', initialize);

好的,这与加载平铺后才定义getBounds()有关。萨尔曼A的回答解决了这个问题:

google.maps.event.addListenerOnce(map, 'idle', function() {
  google.maps.event.trigger(map, 'dragend');
});

我很抱歉,这个无关的
}实际上不在原始代码中。它出现在问题中是因为我从原始代码中删除了大量不相关的代码。我已经编辑了这个问题,现在它是正确的。我已经检查了三遍了。原始代码或问题中没有括号错误;你的问题中没有一行Ruby,我想把
dealWithNewWindow
的声明移到
initialize
函数的外部。我已将
处理新窗口
移到
初始化
之外,遗憾的是仍然无法工作。我认为必须为map
空闲
事件设置一个事件侦听器,才能创建初始边界对象