2012-08-22 146 views
1

JQuery noob here。我需要一些幫助,這很基本,但如果有人能幫助我,我會很感激。我正在一個古怪的頁面上工作,該頁面需要比較出發/到達日期以查看它們是否無效。這是我想出的邏輯來比較完美的日期(對於一個日期)。jQuery迭代邏輯問題..函數中的邏輯

我遇到的問題是有9個需要比較的日期,#AD1和#DD1到#AD9和#DD9,每個行在一個名爲「.dateVal」的類的單獨錶行中。我如何封裝這個代碼來在函數中運行這9個日期?我非常感謝提前的幫助。謝謝!

var strErrors = ''; 
    var strRequired = ''; 

    var iniString = ''; 
    var endString = ''; 
    var dateIni = $('#AD1').val().split('/'); 
    var dateEnd = $('#DD1').val().split('/'); 
    $.each(dateIni, function (index, value) { 
    iniString = iniString + value; 
    }) 
    $.each(dateEnd, function (index, value) { 
    endString = endString + value; 
    }) 

    iniString = parseInt(iniString, 10); 
    endString = parseInt(endString, 10); 


    if (iniString > endString) { 
    strErrors = strErrors + ' - Departure/Arrival dates are incorrect. \n' 
    } 
+0

你見過這個:http://stackoverflow.com/questions/1353684/detecting-an-invalid-date-date-instance-in-javascript? –

+0

日期格式爲非愚蠢(不是標準日期格式)。我的邏輯工作正常,我測試了它,它非常完美。我只想將我的邏輯封裝到一個貫穿9行表格的函數中。感謝您的輸入! – marcus314

回答

0

一種方式是通過在jQuery選擇和一個簡單的JavaScript for循環使用串聯:現在

var strErrors = ''; 

var iniString = ''; 
var endString = ''; 

for (var ii = 1; ii <= 9; ii++) { 
    var dateIni = $('#AD' + ii).val().split('/'); 
    var dateEnd = $('#DD' + ii).val().split('/'); 

    $.each(dateIni, function (index, value) { 
     iniString = iniString + value; 
    }); 

    $.each(dateEnd, function (index, value) { 
     endString = endString + value; 
    }); 

    iniString = parseInt(iniString, 10); 
    endString = parseInt(endString, 10); 

    if (iniString > endString) { 
     strErrors = strErrors + ' - Departure/Arrival dates are incorrect. \n' 
    } 
} 

,如果你想要這個邏輯封裝成幾個功能:

var strErrors = ''; 

function checkAllDates() { 
    for (var ii = 1; ii <= 9; ii++) { 
     checkDate(ii); 
    } 
} 

function checkDate(ii) { 
    var iniString = ''; 
    var endString = ''; 

    var dateIni = $('#AD' + ii).val().split('/'); 
    var dateEnd = $('#DD' + ii).val().split('/'); 

    $.each(dateIni, function (index, value) { 
     iniString = iniString + value; 
    }); 

    $.each(dateEnd, function (index, value) { 
     endString = endString + value; 
    }); 

    iniString = parseInt(iniString, 10); 
    endString = parseInt(endString, 10); 

    if (iniString > endString) { 
     strErrors = strErrors + ' - Departure/Arrival dates are incorrect. \n' 
    } 
} 
+0

感謝您的建議。我要給這個鏡頭..我會讓你知道它是如何工作的! – marcus314

+0

再次感謝您的幫助。我將如何檢查每個#AD或#AD是否有價值? #AD和#DD來自html選擇。用戶可以選擇1-9天之間的選項。你遵循我想傳達的笑聲嗎? – marcus314

+0

你有沒有價值的選擇?如果您在選擇中只有1到9,則其中一個將被選中。 – FishBasketGordo

0

您可以通過使用replace而不是split擺脫/字符避免使用$.each

var strErrors = '', 
    iniNum, 
    endNum, 
    dateIni, 
    dateEnd, 
    numDates = $('.dateVal').length/2; // assumes matching pairs of dates 

// assuming your date values are always yyyy/mm/dd format? 
for (var i = 1; i <= numDates; i++) { 
    dateIni = $('#AD' + i).val().replace('/',''); 
    dateEnd = $('#DD' + i).val().replace('/',''); 

    iniNum = parseInt(iniString, 10); 
    endNum = parseInt(endString, 10); 

    if (iniNum > endNum) { 
     strErrors += ' - Departure/Arrival dates are incorrect. \n'; 
    } 
}