2017-01-24 73 views
0

我有一個IF函數在FOR循環未識別大於0的Javascript IF語句在函數

的代碼是下面的任何其它的整數值不承認除0以外的整數,並與IF函數問題是: 如果(X == 0){curr_year = curr_year;}

<script type = "text/javascript"> 

var r_array = [ 
'Row 1', 
'Row 2', 
'Row 3' 
]; 

var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; 
var array_months = months.concat(months); 

var x = parseInt(0); 
var text_r = ""; 
var row = ""; 
var report = ""; 
var d = new Date(); 
var curr_year = d.getFullYear().toString().substr(2,2);   // 2017 = 17 
var prior_year = (d.getFullYear()-1).toString().substr(2,2); 
var curr_month = d.getMonth();         // Jan = 0 

for (var i_row = 0; i_row < r_array.length; i_row++) { 

    report = r_array[i_row] 
    text_r += ("<tr><th>" + report + "</th>"+ this_row(report) +"</tr>"); 
    row = ""; 
} 

function this_row(report) { 
    x = 0; 
    for (i_col = curr_month; i_col < curr_month + 13; i_col++) {  
     if (x==0) { 
      curr_year = curr_year; 
      } 
     else { 
      curr_year = prior_year; 
      } 

     row += "<td><a href = '"+ curr_year +"' target='blank'>" + array_months[i_col] + "-"+ curr_year +"</a></td>"; 
     x++; 
    } 
    curr_year = d.getFullYear().toString().substr(2,2); 
    return row; 
} 

</script> 

,其中x = 0的第一列中的年顯示瞭如預期 然而 '17',當x被改變爲1 ,第二列中的年份不顯示爲'17'

我已經在第二個腳本中使用相同的變量複製了FOR循環,但在函數之外,它工作正常。因此,我想知道問題是否與在函數中運行FOR循環有關?

任何幫助將不勝感激!

+0

你希望行在調用this_row()時結束了什麼? – domenicr

+0

你得到的輸出是什麼,你期望的是什麼? –

+0

使用上面顯示的代碼(x = 0),第一列中的年份顯示爲預期的'17'。但是,當if函數更改爲(x = 1)時,我期望SECOND列中的年份顯示爲'17',但它不顯示 – OneBigEgg

回答

0

我得到你想要通過計算curr_year和prior_year一來,每次循環中執行的,所以你不要的第一次迭代後,鬆動的curr_year價值的結果for循環。

,我爲了做另一個變化來得到你想要的是改變if語句取決於你所需要得到的價值是什麼列,因此代碼將是這樣的:

function this_row(report) { 
x = 0; 
for (i_col = curr_month; i_col < curr_month + 13; i_col++) { 
    var curr_year = d.getFullYear().toString().substr(2,2);   // 2017 = 17 
    var prior_year = (d.getFullYear()-1).toString().substr(2,2); 
    if (x==2) { 
     curr_year = curr_year; 
     } 
    else { 
     curr_year = prior_year; 
     } 

    row += "<td><a href = '"+ curr_year +"' target='blank'>" + array_months[i_col] + "-"+ curr_year +"</a></td>"; 
    x++; 
} 
curr_year = d.getFullYear().toString().substr(2,2); 
return row; 

}

因此,例如,在這裏我用if(x==2)得到與值「17」,如果你想在第二隻是改變它if(x==1)

希望它可以幫助第三列。

+0

奇妙 - 這解決了問題!非常感謝EAragon,以及對此問題進行調查的其他人, – OneBigEgg

0

當你的函數被調用時,它引用的x的範圍與你定義的x不一樣。更改功能使用本地變量x

function this_row(report) { 
    var x = 0; 
    ... 
} 
+0

感謝您的快速回復Anthony。但是,我提出了您所建議的更改,但不幸的是它沒有任何效果。 – OneBigEgg

+0

它不起作用,因爲您將x遞增1,因此它會落在else子句中,使用上一年。 – domenicr

+0

但是,舉例來說,我改變爲IF(x> 1)我期望從2開始的所有列都具有curr_year ....但它仍然返回上一年 – OneBigEgg