Javascript 计数器未更新,并且它';s值将替换为当前值

Javascript 计数器未更新,并且它';s值将替换为当前值,javascript,drop-down-menu,forms,Javascript,Drop Down Menu,Forms,我在html表单中使用了4个下拉列表。这两个下拉列表表示活动的开始月份和结束月份,另外两个下拉列表表示活动的开始年份和结束年份。我允许用户输入3年的历史记录,完成后,我会提示用户转到下一部分。为了计算3年的历史记录,我取开始月和结束月之间的差值,每次都将其输入计数器(请注意,我使用的是数字,而不是日期对象)。这些值会传递到我的数组中,但计数器不会更新。它只是被数组中的新值替换。谁能告诉我哪里出了问题?这是我的密码: var arrMonthStarted = []; //It stores t

我在html表单中使用了4个下拉列表。这两个下拉列表表示活动的开始月份和结束月份,另外两个下拉列表表示活动的开始年份和结束年份。我允许用户输入3年的历史记录,完成后,我会提示用户转到下一部分。为了计算3年的历史记录,我取开始月和结束月之间的差值,每次都将其输入计数器(请注意,我使用的是数字,而不是日期对象)。这些值会传递到我的数组中,但计数器不会更新。它只是被数组中的新值替换。谁能告诉我哪里出了问题?这是我的密码:

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.")
}
}

提前感谢(KSFIDDLE)

此循环毫无意义,因为数组将只有一项:

for(var m = 0; m < arrCount.length; m++){
输入错误,您编写了
arrMonthSarted
而不是
arrMonthStarted

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

另外,
arrMonthStarted[arrMonthStarted.length]
将始终返回
undefined
,因为您试图访问数组中最后一个项目之外的项目。

您可以将此作为一个信息发布吗?当然。。。谢谢你的回答,哈哈。我知道这很令人困惑,因为纯数字约会更疯狂。那么你对两个月之间的间隔有什么建议?@AndreUk13:从你拥有的索引中减去一个,但首先检查
arrMonthEnded
是否至少包含两个项目,以便有一个以前的结束日期。此外,你还需要将年份合并到值中,以处理不同年份的月份。是的,当然。因为如果有人把2012年1月和2013年1月放在一起,它将不会像现在这样进行评估。所以或多或少:if(arrMonthEnded>=2){if(arrMonthEnded[arrMonthEnded.length-1]-arrMonthStarted[arrMonthSarted.length-1]>1){//code here})。非常感谢您的帮助是的,但有三个编辑:
if(arrMonthEnded.length>=2){if(arrMonthEnded[arrMonthEnded.length-2]-arrMonthStarted[arrMonthStarted.length-1]>1{//code here}
我想对上述内容进行更正,以防您将来需要类似的内容
arrMonthEnded[arrMonthEnded.length-2]
将在数组中向上查看2个位置。第一次,我们只有一个和推杆-2,将返回未定义的第一次我们试图比较差距。我们应该将
arrMonthEnded[arrMonthEnded.length-1]
arrMonthStarted[arrMonthStarted.length-2]
,因为arrMonthStarted总是比截止月份多一个元素。这有点让人困惑,但我必须把它画在纸上才能抓住重点。谢谢你的帮助!
if(arrCount == 36){
if(arrMonthEnded[arrMonthEnded.length - 1] - arrMonthStarted[arrMonthSarted.length] > 1){