Jquery,手动输入的日期选择器

Jquery, datepicker on manual entry

本文关键字:日期 选择器 手动输入 Jquery      更新时间:2024-04-19

我有一个日期选择器,我注意到如果我手动输入日期,即在不使用日历的情况下输入mm/dd/yyyy形式的值,则日期不会更新。

我想允许手动更改日期。因此,我需要验证更新输入的日期。

我开始尝试使用函数change,如下所示:

$('myDatepickerId').change(...)

它不起作用,所以经过一些研究,我发现了onClose:属性。

我这样使用:

onClose: function(date) {
           this_.tripWidget.inputChanged({
                date : date,
            });
        }

这更新了日期,但我不确定如何验证它。

我正在寻找一个与日期选择器相关的函数,以确保输入的日期格式正确。是否有任何方法可以验证日期是否在日期选择器日历中?

编辑:

我在这里发现了一个相关的问题:检测到一个";无效日期";JavaScript 中的日期实例

然后我试图(没有成功)调整我的问题的答案:

onClose: function(date) {
            this_.tripWidget.inputChanged({
                if ( Object.prototype.toString.call(date) === "[object Date]" && !isNaN(date.getTime()){
                    alert("Please enter a valid date.");
                }
                date : date,
            });
        }

当您发送请求时,您可能希望在服务器脚本中而不是在javascript中验证这一点。

您可能需要独立于DatePicker控件进行验证。你可以这样做:A)确保它是一个有效的日期,B)确保它的格式是mm/dd/yyyy

$('#myDatepickerId').on('input', function () {
    var value = $(this).val();
    if (isValidFormat(value) && isValidDate(value)) {
        $(this).addClass('valid');
    }
});
function isValidFormat(value) {
    var regex = new RegExp("^([01][0-12]'/[0-3][0-9]'/[12][0-9][0-9][0-9])$");
    return regex.test(value);
}
function isValidDate(value) {
    var date = new Date(value);
    return date != 'Invalid Date';
}

这是一个工作的plunker

以下代码是我解决问题的方法:

var comp = date.split('/');
var m = parseInt(comp[0], 10);
var d = parseInt(comp[1], 10);
var y = parseInt(comp[2], 10);
var date2 = new Date(y,m-1,d);
if(!(date2.getFullYear() == y && date2.getMonth() + 1 == m && date2.getDate() == d)) {
                alert('Please enter a valid date.');
}