2015-10-07 2 views
1

Я продолжаю получать неопределенные значения для quarterStr? Я пытаюсь получить к нему доступ в функции getNexthreeMonths. Так месяц выбирается из выпадающего меню, а затем я хочу, чтобы получить доступ к результату в getNexthreeMonths:Переменная область за пределами события JQuery

getNextThreeMonths: function() { 
    $("#date").on('change', function (e){ 
    var currentMonth = $(this).find('option:selected').attr('id'); 
    var currentMonth = parseInt(currentMonth); 
    var qNum = Math.floor(currentMonth/3); 
    var qArr = ["Jan","Apr","Jul","Oct"]; 
    var quarterStr = qArr[ (qNum+1) % 4 ] + "," + qArr[ (qNum+2) % 4 ] + "," + qArr[ (qNum+3)%4 ]; 

    }); 
    console.log(quarterStr); 
} 
+0

попробуйте переместить console.log (quarterStr) выше}); в вашем коде. похоже, что это вне анонимной функции, которую вы определили. –

+0

Я хочу получить доступ к quarterStr в функции getNextThreeMonths: хотя. Не уверен, что понимаю –

+0

javascript scope: http://stackoverflow.com/questions/500431/what-is-the-scope-of-variables-in-javascript – Lee

ответ

3

Есть две причины для этого.

Во-первых, в varvar quarterStr = означает, что переменная локально области видимости анонимной функции вы передаете в качестве аргумента on() и не могут быть доступны вне этой функции.

Во-вторых, значение не присваивается quarterStr до изменение событие в элементе даты срабатывает и эта функция запускается. Вы пытаетесь прочитать значение сразу после назначения обработчика события. К тому времени он не изменится, поэтому он всегда будет неопределенным.

Вам нужно переосмыслить свою логику. Вы не можете использовать JavaScript для путешествий во времени и выяснить, что пользователь может сделать в какой-то момент в будущем.

+0

Отличное объяснение. –

Смежные вопросы