Javascript 如何访问在事件侦听器中设置的全局变量?
我正在使用谷歌地图api V3。我需要获取地图的Javascript 如何访问在事件侦听器中设置的全局变量?,javascript,asp.net,events,variables,google-maps-api-3,Javascript,Asp.net,Events,Variables,Google Maps Api 3,我正在使用谷歌地图api V3。我需要获取地图的getsoutwest和getsoutwest边界的值。为此,需要触发“bounds_changed”事件以获取新值。这一切都很好,但是,我需要从事件外部访问这些值,并将其传递给服务器端函数(更具体地说,我不希望每次更改映射边界时都调用服务器端函数) 我的代码是: //Global var sw, nw, Searchbounds; function myFunc(){ google.maps.event.addListener(map, 'b
getsoutwest
和getsoutwest
边界的值。为此,需要触发“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未定义
如果有人知道我如何用目前的方法解决这个问题;或者在不使用事件的情况下访问
getBounds()
函数,那么我将非常感激 我假设你实际上是在定义变量?它们在你的代码中被注释掉了
假设它们定义正确,它们可能不是您期望的类型-例如sw可能存在并填充,但可能没有lat()
属性-可能是latitude()
在边界更改后,尝试在调试器中检查sw对象(firefox中的firebug插件非常适合于此)
更改代码时进行编辑:
在调用边界更改函数之前,您正在调用服务器端函数
试试这个:
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());
});
}
我假设你真的在定义变量?它们在你的代码中被注释掉了 假设它们定义正确,它们可能不是您期望的类型-例如sw可能存在并填充,但可能没有
lat()
属性-可能是latitude()
在边界更改后,尝试在调试器中检查sw对象(firefox中的firebug插件非常适合于此)
更改代码时进行编辑:
在调用边界更改函数之前,您正在调用服务器端函数
试试这个:
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());
});
}
对我来说,这似乎是一个时间问题,而不是范围问题
function myFunc() {
var searchBounds = map.getBounds();
var sw = searchBounds.getSouthWest();
var ne = searchBounds.getNorthEast();
CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());
}
对我来说,这似乎是一个时间问题,而不是范围问题
function myFunc() {
var searchBounds = map.getBounds();
var sw = searchBounds.getSouthWest();
var ne = searchBounds.getNorthEast();
CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());
}
谢谢你的重播。我需要sw&ne变量在事件范围外可访问。每次映射边界更改时,更新的代码都将调用函数“CallServerSideWebService”。简单地说,我需要在不使用事件的情况下填充sw&ne。好的,理解-但在这种情况下,您需要以某种方式提供默认值。换句话说,在第一个边界更改之前,它们中包含什么?只有在触发事件时才更新该值。事件前的值是默认值,在偶数期间更新,但在事件后返回默认值。在以前版本的GoogleMaps(v2)中,只需通过以下方式获取地图边界:Searchbounds=map.getBounds();如果不使用event.odd-这听起来像是一个范围问题,即它设置了一个局部而不是全局,但我以前没有遇到过这种行为-在设置之前,事件侦听器中的变量值是多少?你能读懂环球报吗?关于XSS保护或类似的保护,可能会有一些奇怪的事情发生——即google事件代码来自不同的域,因此无法访问您的DOM。这在所有浏览器中都会发生吗?如果没有,是哪一个?@user547043您提到了默认值,但我看不到您在任何地方设置了默认值。谢谢您的重播。我需要sw&ne变量在事件范围外可访问。每次映射边界更改时,更新的代码都将调用函数“CallServerSideWebService”。简单地说,我需要在不使用事件的情况下填充sw&ne。好的,理解-但在这种情况下,您需要以某种方式提供默认值。换句话说,在第一个边界更改之前,它们中包含什么?只有在触发事件时才更新该值。事件前的值是默认值,在偶数期间更新,但在事件后返回默认值。在以前版本的GoogleMaps(v2)中,只需通过以下方式获取地图边界:Searchbounds=map.getBounds();如果不使用event.odd-这听起来像是一个范围问题,即它设置了一个局部而不是全局,但我以前没有遇到过这种行为-在设置之前,事件侦听器中的变量值是多少?你能读懂环球报吗?关于XSS保护或类似的保护,可能会有一些奇怪的事情发生——即google事件代码来自不同的域,因此无法访问您的DOM。这在所有浏览器中都会发生吗?如果没有,是哪一个?@user547043您提到了默认值,但我看不到您在任何地方设置了默认值。您的代码看起来不正确-这就是您正在使用的代码吗?如果没有,请复制/粘贴准确的代码。