jQuery UI Datepicker maxDate选项的手动日期条目验证

时间:2012-06-27 14:37:19

标签: jquery jquery-ui date jquery-validate jquery-ui-datepicker

我在页面上有jQuery datepicker,需要允许手动输入日期,但还需要验证日期不超过一天。选择器控件已通过maxDate限制,但当手动输入日期时,他们可以提前一天输入日期。一个人(我)如何阻止它?以下是我到目前为止的情况:

$(".datepicker").attr("placeholder", "mm-dd-yyyy").datepicker({
    showOn: "button",
    maxDate: "+1",
    showOtherMonths: true
});

5 个答案:

答案 0 :(得分:12)

如果通过直接输入更改控件的值,我不确定datepicker是否会触发事件。您可以将函数绑定到.change()事件:

$(".datepicker").attr("placeholder", "mm-dd-yyyy").datepicker({
    dateFormat: "mm-dd-yy",                 // since you have defined a mask
    maxDate: "+1",
    showOn: "button",
    showOtherMonths: true

}).on("change", function(e) {
    var curDate = $(this).datepicker("getDate");
    var maxDate = new Date();
    maxDate.setDate(maxDate.getDate() + 1); // add one day
    maxDate.setHours(0, 0, 0, 0);           // clear time portion for correct results
    if (curDate > maxDate) {
        alert("Invalid date");
        $(this).datepicker("setDate", maxDate);
    }
});

Demo here

答案 1 :(得分:9)

我有完全相同的要求,这里的解决方案对我来说就像一个魅力:

  $(".datepicker").attr("placeholder", "mm-dd-yyyy").change(function(){
    $(this).datepicker('setDate', $(this).datepicker('getDate'));
  }).datepicker({
      showOn: "button",
      maxDate: "+1",
      showOtherMonths: true
  });

从Salman A here

引用的修改过的小提琴answer

答案 2 :(得分:7)

好吧,上面的答案是正确的,但它没有验证表格,用户仍然可以提交表格,

我做了一些研究,但是找不到ny,最后我写了这个功能,工作正常并验证了表格,并且在输入正确的日期之前不允许提交表格,希望它有所帮助!

您唯一需要做的就是添加此代码,然后将其应用于具有“datePicker”类的所有字段。

 $(".datePicker").datepicker({
            dateFormat: 'd/mm/yy',
            changeMonth: true,
            changeYear: true,
            firstDay: 1,
            minDate: Date.parse("1900-01-01"),
            maxDate: Date.parse("2100-01-01"),
            yearRange: "c-90:c+150"
        });

        // validation in case user types the date out of valid range from keyboard : To fix the bug with out of range date time while saving in sql 
        $(function () {
            $.validator.addMethod(
                "date",
                function (value, element) {

                    var minDate = Date.parse("1900-01-01");
                    var maxDate = Date.parse("2100-01-01");
                    var valueEntered = Date.parse(value);

                    if (valueEntered < minDate || valueEntered > maxDate) {
                        return false;
                    }
                    return !/Invalid|NaN/.test(new Date(minDate));
                },
                "Please enter a valid date!"
            );
        });

答案 3 :(得分:4)

一种选择是通过输入字段readonly来删除手动输入日期的功能。这将限制用户手动输入任何疯狂的内容,并强制使用datepicker。

答案 4 :(得分:0)

我的解决方案是使用输入的日期重新设置日期以触发日期选择器的内部检查。通过比较旧值和新值,您可以检查日期是否已更改:

$(".datepicker").datepicker({
  showOn: "button",
  maxDate: "+1",
  showOtherMonths: true}).on('change', function(e) {
        var oldDate = $(this).datepicker('getDate');
        $(this).datepicker('setDate', $(this).datepicker('getDate'));
        var newDate = $(this).datepicker('getDate');
        if (oldDate.getTime() !== newDate.getTime()){
            $(this).val('');
        }
    });