0

HTMLフォームで4つのドロップダウンリストを使用しています。2 つのドロップダウンは、活動の開始月と終了月を表し、他の 2 つは活動の開始年と終了年を表します。ユーザーが 3 年間の履歴を入力できるようにし、完了後に次のセクションに進むようにユーザーに促します。3 年間の履歴を計算するには、開始月と終了月の差を取り、そのたびにカウンターに入力します (Date オブジェクトではなく数値で作業していることに注意してください)。値は配列に渡されますが、カウンターは更新されません。配列内の新しい値に置き換えられるだけです。誰が問題がどこにあるのか教えてもらえますか? これが私のコードです:

var arrMonthStarted = [];  //It stores the month that activity started
var arrMonthEnded = [];   //It stores the month that activity ended
var arrYearStarted = []; //It stores the year that activity started
var arrYearEnded = [];  //It stores the year that activity ended
function validatedropdowns1(){
var monthStarted = document.getElementById('idMonthStarted').value;   
var yearStarted = document.getElementById('idYearStarted').value;    
var monthEnded = document.getElementById('idMonthEnded').value;     
var yearEnded = document.getElementById('idYearEnded').value;     
arrMonthStarted.push(monthStarted);  
arrMonthEnded.push(monthEnded);     
arrYearStarted.push(yearStarted);    
arrYearEnded.push(yearEnded);
//Calculating the 3-year history
var count = 0;
if(yearStarted == yearEnded){
    if(monthEnded < monthStarted){
        var temp = monthEnded;
        monthEnded = monthStarted;
        monthStarted = temp;
    }
    var diffmonths = monthEnded - monthStarted;
    count = count + diffmonths;
}
//Take the difference between the years.
var subYears = yearEnded - yearStarted;
//If 1, just take the difference on the first 2 lines of the calendar 
if(subYears == 1){
    var subLine1 = 12 - monthStarted;
    var subLine2 = 12 - monthEnded;
    var finalLine2 = 12 - subLine2;
    var takeresult = subLine1 + finalLine2;
    count = count + takeresult;
}
//Follow case 1, but also add 12 months
if(subYears == 2){
    var subLine3 = 12 - monthStarted;
    var subLine4 = 12 - monthEnded;
    var finalLine3 = 12 - subLine4;
    var takeresult11 = subLine3 + finalLine4;
    var takeresult1 = 12 + takeresult11;
    count = count + takeresult1l; 
}
//add another 12 months (24 now) on step 1.
if(subYears == 3){
    var subLine5 = 12 - monthStarted;
    var subLine6 = 12 - monthEnded;
    var finalLine5 = 12 - subLine6;
    var takeresult22 = subLine5 + finalLine6;
    var takeresult2 = 24 + takeresult22;
    count = count + takeresult2; 
}
var arrCount = []; // array to hold the count var
arrCount.push(count); // push count into arrCount 

//print total months
for(var m = 0; m < arrCount.length; m++){
    alert("The array now has" + "" + "" + count + "" + "months");
}

if(arrCount == 36){
    alert("You have successfuly finished this section. Please go to the next section. Thank you.")
    document.getElementById('btnAdd').disable = true;
}

if(arrMonthEnded[arrMonthEnded.length - 1] - arrMonthStarted[arrMonthSarted.length] > 1){
    alert("There should not be a gap of more than a month in your 3 year activity. Fill in all the months and select from the list what you were doing each month. Thank you.")
}
}

また、終了日と次の開始日のギャップをテストしようとしていました。たとえば、終了日として 2011 年 12 月、次の開始日として 2012 年 3 月を入力した場合、1 か月以上のギャップがあるかどうかを確認したいと思います。以下のコードを試しましたが、うまくいきませんでした

if(arrMonthEnded[arrMonthEnded.length - 1] - arrMonthStarted[arrMonthSarted.length] > 1){
    alert("There should not be a gap of more than a month in your 3 year activity. Fill in all the months and select from the list what you were doing each month. Thank you.")
}

よろしくお願いします(KSFIDDLE http://jsfiddle.net/k4dNb/

4

1 に答える 1

0

配列には 1 つの項目しかないため、このループは無意味です。

for(var m = 0; m < arrCount.length; m++){

ここでは、配列と数値を比較しています。両方が文字列に変換され、 is の文字列値が[36]isの文字列値"36"と同じである36ため、実際には機能します"36"が、混乱を招く方法で行われます。

if(arrCount == 36){

arrMonthSartedタイプミス、代わりに書いたarrMonthStarted

if(arrMonthEnded[arrMonthEnded.length - 1] - arrMonthStarted[arrMonthSarted.length] > 1){

また、配列の最後の項目を超えて項目にアクセスしようとしているため、arrMonthStarted[arrMonthStarted.length]常に が返されます。undefined

于 2013-09-23T22:31:26.957 に答える