我有以下JavaScript函数,它接收坐标并返回最近的地铁站:
function coord() {
var metro = new YMaps.Metro.Closest(new YMaps.GeoPoint(<?=getCoords($addr) ?>), { results : 1 } )
YMaps.Events.observe(metro, metro.Events.Load, function (metro) {
if (metro.length()) {
metro.setStyle("default#greenSmallPoint");
var firstStation = metro.get(0);
var tubest = (firstStation.text).split("метро ");
var tube = tubest[1];
if($("span#tubest").text() == '') {
$('.whiteover').hide();
}
} else {
if($("span#tubest").text() == '') {
$('.whiteover').hide();
}
}
});
}
作为执行此函数的结果,我需要输出的值是“tube”变量的值(var tube = tubest [1];)。基本上一个简单的document.write就可以了。或者简单的返回值如:
var tubestation = coord();
但是我不确定如何实现这一点。
答案 0 :(得分:0)
你不能让这个函数返回值,因为你正在使用一个观察者模式 - 它为代码设置了一个异步逻辑。简单地说,在您的coord()
函数返回时,该值尚未存在。
为了解决这个问题,通常你会传递一个回调函数,然后在那里重新开始计算。
将您的函数声明为:
function coord(callback)
然后,在知道所需的值后,使用值
调用回调callback.call(null, tube);
在if { ... } else { ... }
之后执行此操作,以便在成功和失败时调用您的回调(如果失败,它将通过undefined
,您可能需要通过在var tube = null
之前声明if
来更正它tubestation = coord();
)。
然后,而不是:
coord(function(tubestation) {
// continuation of your code here
});
这样称呼:
document.write
您可能无法使用coord(function(tubestation) {
$('#tube_station').text(tubestation);
});
,因为使用它的时间很长,但您可以将值设置为您已生成的元素的内容。你的标签中有jQuery,所以很容易:
<div id="tube_station"/>
假设您的HTML中某处有{{1}}。
答案 1 :(得分:0)
这个简单的添加功能怎么样?
function coord() {
var metro = new YMaps.Metro.Closest(new YMaps.GeoPoint(<?=getCoords($addr) ?>), { results : 1 } )
YMaps.Events.observe(metro, metro.Events.Load, function (metro) {
if (metro.length()) {
metro.setStyle("default#greenSmallPoint");
var firstStation = metro.get(0);
var tubest = (firstStation.text).split("метро ");
var tube = tubest[1];
<强> $( 'DIV#myDivResult')。HTML(管)强>
if($("span#tubest").text() == '') {
$('.whiteover').hide();
}
} else {
if($("span#tubest").text() == '') {
$('.whiteover').hide();
}
}
});
}