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空闲
事件设置一个事件侦听器,才能创建初始边界对象