如何在地理编码查找后阻止Google地图重新初始化?

时间:2015-01-04 20:50:38

标签: javascript google-maps google-maps-api-3

我正在使用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>

1 个答案:

答案 0 :(得分:0)

当使用javascript函数作为表单的onsubmit函数时,如果您不希望从服务器重新加载页面,则必须从函数返回false。