0

У меня есть javascript-код, похожий на следующий, однако, когда я пытаюсь использовать 'myVar' внутри foo(), его значение не определено. Я также попытался передать переменную в bar() и назначить ее напрямую, но не пройдя по ссылке.Назначение скрытой переменной в функции внутри функции

function foo() { 
    bar(); 
    var myVar = document.getElementById('coords').value; 
    // myVar should now be (40.7143528, -74.0059731) 
    alert(myVar); // returns blank 

    var request = { 
    location: myVar, 
    radius: 500, 
    types: [type] //previously defined 
    }; 

    //Then send a search request to Google... 
} 

function bar() { 
    geocoder.geocode({'address':address}, function(results, status) { 

     document.getElementById('coords').value = results[0].geometry.location; 
     // Let's say the location is NYC (40.7143528, -74.0059731) 

    alert(document.getElementById('coords').value); //returns the correct value 
    // however, this pops up after the pop up in function foo() 

    }); 
} 

со следующим HTML

<input type="hidden" id="coords" name="coords"/> 

Реальный код использует API Карт Google, если это делает разницу:

+0

Когда вы называете 'foo'? –

+0

Кроме того, когда я размещал оповещения об отладке, кажется, что создание «myVar» происходит до вызова bar(). –

+0

foo() вызывается onClick на кнопке (перед скрытой переменной в HTML) –

ответ

1

bar работает асинхронно, потому что geocoder делает. Это означает, что

document.getElementById('coords').value = results[0].geometry.location; 

фактически выполняет после

var myVar = document.getElementById('coords').value; 

Вы не можете использовать Ajax таким образом. Вся ваша работа, которая зависит от results/status, должна выполняться в обратном вызове.

+0

Спасибо. То, что я закончил, это просто положить bar() внутри foo() вместо того, чтобы иметь его как дополнительную функцию. Мне бы хотелось, чтобы у меня была отдельная функция, но мне это, скорее всего, не понадобится. –

+0

@AdamMThompson Пожалуйста, поддержите и примите полезные ответы –

1

jsfiddle Demo

прекрасно работает для меня. Убедитесь, что при определении своих функций на самом деле используйте function перед определением.

function foo() { 
bar(); 
var myVar = document.getElementById('coords').value; 
} 

function bar() { 
document.getElementById('coords').value = 4; 
} 

foo();