我有类似下面的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"/>
真正的代码是使用谷歌地图API,如果这有所不同:
答案 0 :(得分:1)
<强> jsfiddle Demo 强>
对我来说运行正常。确保在定义函数时在定义前面实际使用function
。
function foo() {
bar();
var myVar = document.getElementById('coords').value;
}
function bar() {
document.getElementById('coords').value = 4;
}
foo();
答案 1 :(得分:1)
bar
异步运行,因为geocoder
会这样做。这意味着
document.getElementById('coords').value = results[0].geometry.location;
实际上在
之后执行var myVar = document.getElementById('coords').value;
你不能这样使用ajax。所有依赖results
/ status
的工作都必须在回调中完成。