-1

私には機能があります

function getCustomAddress() {
    alert(results[i].formatted_address)
}

alert(results[i].formatted_address)別の関数で定義されています。getCustomAddress で未定義であることは明らかです。この問題を解決して値を警告するにはどうすればよいですか。フィドルも設定しました。

http://jsfiddle.net/KEdrq/5/

4

3 に答える 3

1

jsFiddle をチェックアウトしました。結果は ajax リクエストとして取得されます。結果をグローバル スコープの変数に格納し、タイムアウトを設定して結果を取得する必要があります。ジオコーダー リクエストの終了前に関数を実行し、results 変数に渡すこともできます。

geocoder.geocode(geocoderRequest, function (results, status) { 
  // execute your function here. getCustomAddress(result)
}

私が行った変更を確認してください。 http://jsfiddle.net/KEdrq/7/

コード変更のまとめ。

 var _results;

 function initialize() {
.
.
.
     google.maps.event.addListener(marker, 'dragend', function (e) {

         getAddress(e.latLng);
         setTimeout('getCustomAddress(0);', 500);
     })

     function getAddress(latLng) {
         if (!geocoder) {
             geocoder = new google.maps.Geocoder();
         }
         var geocoderRequest = {
             latLng: latLng
         }
         geocoder.geocode(geocoderRequest, function (results, status) {
             _results = results;
.
.
.

 function getCustomAddress(i) {
     alert(_results[i].formatted_address)
 }

getCustomAddress 関数で結果 ID を渡す代わりに、for ループを作成してすべての結果を警告することができます。

于 2013-04-06T06:53:34.977 に答える
1

関数パラメーターとして渡すだけです

function getCustomAddress(result) {
    alert(result.formatted_address)
}

そのため、関数を呼び出すときは、1 つのパラメーターを指定する必要があります: getCustomAddress(results[i]); 例えば

于 2013-04-06T06:33:06.040 に答える
1

関数を使用してプライベート スコープを作成し、そこですべてのグローバル変数を定義できます。

(function(){
 var results = [];
 function getCustomerAdress(){
 //... call result etс
 }

 function set result(){
 //... set result etc
 }

 // some code for initialization, setting onload handlers etc
})();
于 2013-04-06T06:38:37.470 に答える