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

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 回答
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 回答