document.write в теле функции - PullRequest
       3

document.write в теле функции

0 голосов
/ 10 января 2012

У меня есть следующая функция 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();
                        }
                    }
                });
}

Значение, которое мне нужно вывести в результате выполнения этой функции, является значением "трубки"переменная (var tube = tubest [1];).В основном будет работать простой document.write.Или простое возвращаемое значение, например:

var tubestation = coord();

Однако я не уверен, как этого добиться.

Ответы [ 2 ]

0 голосов
/ 10 января 2012

Как насчет этого простого добавления к этой функции?

   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 (tube)

                        if($("span#tubest").text() == '') {
                        $('.whiteover').hide();
                    }
                } else {
                    if($("span#tubest").text() == '') {
                        $('.whiteover').hide();
                    }
                }
            });

}

0 голосов
/ 10 января 2012

Эта функция не может возвращать значение, поскольку вы используете шаблон наблюдателя, который устанавливает асинхронную логику для кода.Проще говоря, в момент, когда ваша функция 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 со временииспользовать его было бы давно, но вы можете установить значение в качестве содержимого элемента, который вы уже сгенерировали.В ваших тегах есть jQuery, так что это довольно просто:

coord(function(tubestation) {
  $('#tube_station').text(tubestation);
});

, если у вас есть <div id="tube_station"/> где-то в вашем HTML.

...