2013-04-06 39 views
-1

我有一个函数如何解决Javascript范围问题。关闭的答案是?

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

alert(results[i].formatted_address)在另一个函数定义。这显然意味着它在getCustomAddress中是未定义的,那么如何解决这个问题并提醒这些值。我也设置了一个小提琴。

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

+4

如果您发布jsfiddle示例发布一个好的。 – elclanrs 2013-04-06 06:28:03

+0

你是如何让我编辑一个小丑的,是不是很清楚?它不能通过分离脚本和标记猜测来实现它,因为回调本质。 – Mike 2013-04-06 06:31:44

回答

1

你可以只把它作为一个函数参数

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

所以当你打电话,你需要提供一个参数功能: getCustomAddress(结果[1]);例如

1

你可以创建一个功能的私人范围和定义的全局变量有:

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

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

// some code for initialization, setting onload handlers etc 
})(); 
1

我签出的jsfiddle,结果被取出作为一个Ajax请求。 您需要将结果存储在具有全局范围的变量中,然后设置超时以获取结果。您还可以在地理编码器请求结束之前执行您的函数,并将结果变量传递给它。

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) 
} 

你可能想创建一个for循环,以提醒所有的结果而不是传递结果ID在getCustomAddress功能。