函数体中的document.write

时间:2012-01-10 17:43:18

标签: javascript jquery document.write

我有以下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();

但是我不确定如何实现这一点。

2 个答案:

答案 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();
                    }
                }
            });

}

相关问题