我正在使用Google Maps Javascript API v.3。下面是我写的javascript。目标是初始化地图,然后通过Google地图地理编码器进行地址查找,使用该长度来重新定位地图,并设置标记。我认为我已经完成了大部分工作,除了在我重新定位地图并放置标记后,页面会触发另一个onLoad事件,导致initialize()函数再次运行并重置我的所有变量。在盯着这段代码半天之后,我不确定是什么导致额外的onLoad事件。造成这种情况的原因是什么?
我也是编写JavaScript和使用Google地图的新手,所以我很高兴其他关于代码质量的指针。我知道我已尝试在全局范围内设置几个变量,但我不确定我是否已正确完成。
这是代码(注意:我计划最终替换setTimeout函数,但我仍然没有掌握asynch调用编程的诀窍......我想我接下来会解决这个问题。)
<script type="text/javascript">
var map;
var geocoder;
var marker;
var latlng;
function initialize() {
geocoder = new google.maps.Geocoder();
var mapOptions = {
center: new google.maps.LatLng(47.606, -122.314),
zoom: 12
};
if (this.map == null){
this.map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
}
}
function checkResponse(results, response){
if (response == google.maps.GeocoderStatus.OK) {
this.latlng = results[0].geometry.location;
this.map.setCenter(results[0].geometry.location);
this.marker = new google.maps.marker({ map: map, position: results[0].geometry.location});
}
else {
alert("Geocode was not successful for the following reason: " + response);
}
}
function searchAddress(){
var address = document.getElementById('address1').value;
var state = document.getElementById('state1').value;
var zip = document.getElementById('zip1').value;
var addressInput = address + ',' + state + ',' + zip;
geocoder.geocode( { 'address': addressInput}, function(results, status) {
//ToDo remove this setTimeout function and replace it with a callback
setTimeout(checkResponse(results, status), 3000);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
答案 0 :(得分:0)
当使用javascript函数作为表单的onsubmit函数时,如果您不希望从服务器重新加载页面,则必须从函数返回false。