如何访问在事件侦听器中设置的全局变量?

时间:2010-12-18 14:48:44

标签: javascript asp.net events variables google-maps-api-3

我正在使用Google maps api V3。我需要获得getSouthWest&的价值。我的地图的getNorthEast范围。要执行此操作,需要触发'bounds_changed'事件以获取新值。这一切都很好,但是,我需要从事件外部访问这些值并传递给服务器端函数(更具体地说,我不希望每次更改映射边界时都调用我的服务器端函数)。

我的代码是:

//Global
var sw, nw, Searchbounds;

function myFunc(){

google.maps.event.addListener(map, 'bounds_changed', function() {
        Searchbounds = map.getBounds();
        sw = Searchbounds.getSouthWest();
        ne = Searchbounds.getNorthEast();

    });

    CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());
}

执行此代码时,我收到错误消息sw is undefined

如果有人知道如何使用当前方法解决此问题;或者在不使用事件的情况下访问getBounds()函数,那么我将非常感激!

2 个答案:

答案 0 :(得分:1)

这对我来说似乎是一个时间问题,而不是范围问题。

  1. 您的函数会触发并添加处理程序
  2. 然后它尝试访问未定义的sw(就像它被声明时那样)
  3. 然后事件可能会触发并设置sw。
  4. 我认为API可能正在改变单个对象引用,而您仍然坚持这一点,但似乎不太可能。如果是这种情况,请尝试存储lat和lng值,而不是nw和sw,因为它们是数字基元。

    但是,您必须能够访问事件之外的地图。它看起来很简单:

    function myFunc() {
      var searchBounds = map.getBounds();
      var sw = searchBounds.getSouthWest();
      var ne = searchBounds.getNorthEast();
    
      CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());
    }
    

答案 1 :(得分:0)

我假设你实际上是在定义变量?他们在你的代码中被注释掉了......

假设它们被正确定义,它们可能不是您期望的类型 - 例如sw可能存在并且填充的ut可能没有lat()属性 - 也许latitude()

尝试在边界更改后检查调试器中的sw对象(firefox中的firebug插件对此非常有用)

编辑代码已被更改:

在调用bounds changed函数之前调用服务器端函数...

试试这个:

var sw, nw, Searchbounds;

function myFunc(){

google.maps.event.addListener(map, 'bounds_changed', function() {
        Searchbounds = map.getBounds();
        sw = Searchbounds.getSouthWest();
        ne = Searchbounds.getNorthEast();

        //Moved inside the event handler
        CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());

    });

}