2015-10-07 100 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

雖然我想訪問getNextThreeMonths:函數中的quarterStr,但不知道我是否理解 –

+0

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

回答

3

有兩個原因。

首先,在var quarterStr =中的var表示該變量的本地範圍爲您作爲參數傳遞給on()的匿名函數,並且無法在該函數外訪問該函數。

其次,值不會被分配到quarterStr,直到更改事件日期元素觸發並且該函數運行。您正在嘗試在分配事件處理程序後讀取該值。到那時它將不會改變,所以它總是未定義的。

你需要重新思考你的邏輯。您無法使用JavaScript來時間旅行,並找出用戶在將來某個時候可能會做的事情。

+0

優秀的解釋。 –