2016-01-11 44 views
0

使用自舉日期選擇器。 有兩個文本框爲起始日期&結束日期。我試圖在用戶更改這兩個文本框中任何一個的日期時設置驗證。 在頁面加載時,兩個框都有當前日期。日期驗證與引導日期選擇器

測試用例:
當用戶集..
1的startDate超過當前日期,設定的startDate =結束日期
2.超出的startDate結束日期,結束日期設定=的startDate
3.結束日期超過當前日期,結束日期設定=當前日期
4. endDate低於startDate,設置startDate = endDate

情況1失敗。今天要說的是2016年1月11日,我設置起始日期爲2016年1月12日,它不會改變到2011年1月11日,但仍然爲1月12日,2016年

此外,案例3失敗。

有什麼事在我的邏輯。

這裏是小提琴 - http://jsfiddle.net/snh6eh9p/2/

JS:

function validateDates(dateType) { 
    //dateType is to know if this function was fired by changing startdate or enddate 
    //end-date must always be >= start-date 
    var today = new Date(); 
    var startDate = new Date($(".txtStartDate").val()); 
    var endDate = new Date($(".txtEndDate").val()); 

    switch (dateType) { 
    case 1: 
    case "1": 
     //if startDate is changed 
     if (startDate > today) { 
     setTriggerDates(endDate, 1); //set startDate=enddate   
     } else if (startDate > endDate) { 
     setTriggerDates(startDate, 2); //set endDate=startDate 
     } 
     break; 
    case 2: 
    case "2": 
     //if endDate is changed      
     if (endDate > today) { 
     setTriggerDates(today, 2); //set endDate=today 
     } else if (endDate < startDate) { 
     setTriggerDates(endDate, 1); //set startDate=endDate 
     } 
     break; 
    } 
} 

function setTriggerDates(newDate, applyTo) { 
    //applyTo determines, which textfield the value should be applied to. 
    //if 1, then change value of txtStartDate, 
    //if 2, then change value of txtEndDate 

    //populate date into the date fields 
    var today = new Date(newDate); 
    var dd = today.getDate(); 
    var mm = today.getMonth() + 1; //January is 0! 
    var yyyy = today.getFullYear(); 

    if (dd < 10) { 
    dd = '0' + dd 
    } 

    if (mm < 10) { 
    mm = '0' + mm 
    } 

    today = yyyy + '-' + mm + '-' + dd; 

    switch (applyTo) { 
    case 1: 
    case "1": 
     $(".txtStartDate").val(today); 
     break; 
    case 2: 
    case "2": 
     $(".txtEndDate").val(today); 
     break; 
    } 
} 

回答

1

更新您的jsfiddle來解決問題http://jsfiddle.net/snh6eh9p/4/

只有我沒變是隱藏的事件,而不是CHANGEDATE事件調用validateDates

$(".txtStartDate").datepicker() 
.on("hide", function(ev) { 
    validateDates(1); 
}); 

$(".txtEndDate").datepicker() 
.on("hide", function(ev) { 
    validateDates(2); 
});