【问题标题】:Start date End date validation in jQueryjQuery中的开始日期结束日期验证
【发布时间】:2015-06-04 01:22:34
【问题描述】:

我必须使用 jQuery 验证开始日期小于结束日期和结束日期大于开始日期。应用程序使用 HTML 5 + Thymeleaf。

代码:

验证 1:

$('#ValidFrom').removeClass('hasDatepicker').datepicker({ 
    dateFormat: 'dd-M-yy',
    changeMonth: true,
    changeYear: true,
    onSelect : ChangeEndDate
});

function ChangeEndDate() {
    var d = $("#ValidFrom").datepicker('getDate'); 
    $('#ValidTo').removeClass('hasDatepicker').datepicker({
        minDate : d, 
        dateFormat: 'dd-M-yy',
        changeMonth: true,
        changeYear: true
    });
}

验证 2:

$('#ValidTo').removeClass('hasDatepicker').datepicker({ 
    dateFormat: 'dd-M-yy',
    changeMonth: true,
    changeYear: true,
    onSelect : ChangeStartDate
});

function ChangeStartDate() {
    var d = $("#ValidTo").datepicker('getDate');  
    $('#ValidFrom').removeClass('hasDatepicker').datepicker({
        maxDate : d, 
        dateFormat: 'dd-M-yy',
        changeMonth: true,
        changeYear: true
    });
}

如果我使用其中任何一种验证,它都可以正常工作。但如果我同时使用两者,则只有验证 1 有效。任何人都可以帮助解决这个问题。

提前致谢。

【问题讨论】:

    标签: jquery html validation datepicker thymeleaf


    【解决方案1】:

    因为在您的更改方法中,您通过调用它再次创建日期选择器并且不再传递更改侦听器函数。例如:

    function ChangeStartDate() {
        var d = $("#ValidTo").datepicker('getDate');
        $('#ValidFrom').datepicker("destroy");
        $('#ValidFrom').datepicker({
            maxDate : d, 
            dateFormat: 'dd-M-yy',
            changeMonth: true,
            changeYear: true,
            onSelect : ChangeEndDate
        });
    }
    

    这样,您首先销毁日期选择器,然后使用附加的 onSelect 方法重新初始化它。我不确定为什么要从元素中删除类,但是如果要销毁元素,则删除类不是解决方案。你必须调用destroy函数。

    【讨论】:

    • 感谢您的回答。对不起,你能不能把我说得更清楚一点。当我只给出二分之一时,这两种验证都对我有用。但是当我同时给出两个验证时它不起作用。我不知道出了什么问题。
    • 谢谢。我尝试了解决方案。问题仍然没有解决。只有第一次验证有效。第二个没有。
    【解决方案2】:

    试试这个方法。您必须在再次初始化之前销毁选择器。在初始化选择器中,您必须设置选项onSelect。希望对你有更多帮助

    $('#ValidFrom').datepicker({ 
    dateFormat: 'yy-mm-dd',
    changeMonth: true,
    changeYear: true,
    onSelect : ChangeEndDate});
    
    function ChangeEndDate() {
    var d = $("#ValidFrom").datepicker('getDate'); 
    $( "#ValidTo" ).datepicker( "destroy" );
    $('#ValidTo').datepicker({
        minDate : d, 
        dateFormat: 'yy-mm-dd',
        changeMonth: true,
        changeYear: true,
        onSelect : ChangeStartDate
    });}
    
    $('#ValidTo').datepicker({ 
    dateFormat: 'yy-mm-dd',
    changeMonth: true,
    changeYear: true,
    onSelect : ChangeStartDate});
    function ChangeStartDate() {
    var d1 = $("#ValidTo").datepicker('getDate');  
    $( "#ValidFrom" ).datepicker( "destroy" );
    $('#ValidFrom').datepicker({
        maxDate : d1 , 
        dateFormat: 'yy-mm-dd',
        changeMonth: true,
        changeYear: true,
        onSelect : ChangeEndDate
    });}
    

    【讨论】:

    • 感谢您的回复。我尝试了解决方案,但没有奏效。它没有禁用 TO 日期。预计在选择 FROM 日期后,TO 日期中的 Datepicker 应禁用所选 FROM 日期之前的所有日期。反之亦然。
    • 你试试这个方法:创建新的简单 html 并再次测试。我认为你在某个地方有点错误
    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多