未捕获的TypeError:无法读取未定义的属性“geocode”

时间:2015-11-15 05:17:22

标签: javascript google-maps jsp

我无法让我的地理编码在我的一个jsp页面中工作。它在另一个工作,但这一个导致麻烦。

我有一个base.jsp,它在我所有的jsp页面之间共享。它有:

var geocoder;

$(document).ready(function initialize() {       
    map = new google.maps.Map(document.getElementById('map-canvas'), {
        center : { lat : 56.138, lng : 8.967 },
        zoom : 7,
        disableDoubleClickZoom : true
        });          

    geocoder = new google.maps.Geocoder();                              
});

function addressTolatlng(address){
    geocoder.geocode( { 'address': address}, function(results, status) {

          if (status == google.maps.GeocoderStatus.OK) {
            var latitude = results[0].geometry.location.lat();
            var longitude = results[0].geometry.location.lng();
            var myLatlng = new google.maps.LatLng(latitude, longitude);

            console.log(myLatlng);

          } 
    }); 
}

这是我的jsp页面,它给出了错误:

$( document ).ready(function() {
    console.log(input);
    var input = document.getElementById('addressField');         
    var autocomplete = new google.maps.places.Autocomplete(input, {
        types: ["geocode"]
    });   

    autocomplete.bindTo('bounds', map);                          
});

<input type="text" placeholder="address" name="address" id="addressField" class="form-control" aria-label="..." value="">

<script>
$("#addressField").keyup(function() {                                       
    var address = document.getElementById('addressField').value;    
    addressTolatlng(address);
});                                                                     
</script>

我得到Uncaught TypeError:运行它时无法读取未定义的属性'geocode'。但是我得到了另一个具有相同设置的页面,并且它在那里工作得很完美,所以对我来说这种方式不会表现得有点奇怪。

控制台还提供以下内容:

(anonymous function)    @   eventHandler?action=createEvent:790
m.event.dispatch    @   jquery-1.11.3.min.js:4
r.handle    @   jquery-1.11.3.min.js:4

我有很多脚本导入,对我来说这是页面上的唯一区别。这会导致问题吗?

1 个答案:

答案 0 :(得分:3)

在这行代码中

geocoder.geocode( { 'address': address}, function(results, status) {

geocoder是未定义的(或null),并且没有任何东西可以在其中访问b / c它不知道是什么地理编码器。

未定义的原因是地理编码器超出了addressTolatlng函数的范围。要解决这个问题,你可以a)通过参数传递地理编码器到你的函数b)在该函数中再次定义地理编码器或c)将函数添加到你的iniatilize()函数中(但我不是100%在那个函数上)

希望有所帮助!