2015-11-15 152 views
0

我無法讓我的地理編碼在我的某個jsp頁面中工作。它在另一個工作,但這是造成麻煩。Uncaught TypeError:無法讀取未定義的屬性'geocode'

我有一個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> 

我得到遺漏的類型錯誤:運行此時無法讀取的未定義的屬性,「地址解析」。但是我得到了另一個具有相同設置的頁面,並且它的工作原理非常完美,所以對於我來說,這種方式不會有相同的表現。

控制檯也給出了這些:

(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 

我有很多劇本進口,這對我來說是頁面上的唯一區別。這會導致問題嗎?

+0

你有匿名函數,地理編碼是在它外面定義的,所以它不會被識別。這意味着它將返回爲未定義。 –

+0

我可以看到控制檯也給出了一個匿名函數的提示。但是這在另一個頁面中工作,它怎麼會在這裏不起作用? – JonCode

+0

基本上和我說的Danial解釋的一樣。您必須清除並且如果要將變量傳遞到函數中,則需要在此函數的參數中設置該變量。例如:'function your_function($ a,$ b,$ c){console.log($ a); // <不再未定義:)}' –

回答

3

在這行代碼

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

地址解析器未定義(或空),並沒有什麼可以在它可以使用B/C,它不知道地址解析器是什麼。

未定義的原因是地理編碼器超出了addressTolatlng函數的範圍。要解決這個問題,你可以a)通過一個參數將geocoder傳遞給你的函數b)再次在該函數中定義geocoder或c)將函數添加到你的iniatilize()函數中(但我不是100%)

希望有所幫助!

+0

感謝您澄清這一點。我去了,現在它的作品:) – JonCode

相關問題