0

次のような JavaScript コードがありますが、foo() 内で「myVar」を使用しようとすると、その値は未定義です。また、変数を bar() に渡して直接割り当てようとしましたが、参照渡しはしません。

function foo() { 
   bar();
   var myVar = document.getElementById('coords').value;
   // myVar should now be (40.7143528, -74.0059731)
   alert(myVar); // returns blank

   var request = {
    location: myVar,
    radius: 500,
    types: [type] //previously defined 
   };

   //Then send a search request to Google...
}

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

      document.getElementById('coords').value = results[0].geometry.location;
      // Let's say the location is NYC (40.7143528, -74.0059731)

     alert(document.getElementById('coords').value); //returns the correct value
     // however, this pops up after the pop up in function foo() 

   });
}

次のHTMLで

<input type="hidden" id="coords" name="coords"/>

それが違いを生む場合、実際のコードはGoogle Maps APIを使用しています:

4

2 に答える 2

1

barするため、非同期で実行されますgeocoder。つまり、

document.getElementById('coords').value = results[0].geometry.location;

実際に実行されるのは

var myVar = document.getElementById('coords').value;

この方法では ajax を使用できません。results/に依存するすべての作業statusは、コールバックで実行する必要があります。

于 2013-04-02T20:25:47.853 に答える
1

jsfiddle デモ

私にとってはうまくいきます。function関数を定義するときは、定義の前で実際に使用するようにしてください。

function foo() { 
 bar();
 var myVar = document.getElementById('coords').value;
}

function bar() {
 document.getElementById('coords').value = 4;
}

foo();
于 2013-04-01T23:02:11.693 に答える