如何使 Jquery datepicker 验证适用于默认值

Posted

技术标签:

【中文标题】如何使 Jquery datepicker 验证适用于默认值【英文标题】:how to make the Jquery datepicker validations to work on for default values 【发布时间】:2017-08-07 03:36:43 【问题描述】:

我需要验证开始日期和结束日期,如下所示: 问题是开始日期和结束日期在 html 本身具有默认日期,如下所示:

Start Date: <input type="text" id="startDate" value="2017-03-13"/>
End Date: <input type="text" id="endDate" value="2017-03-13"/>

当我为该开始日期和结束日期添加 datepicker 和一些验证时,验证不适用于 html 代码中给出的默认值,我怎样才能使开始日期和结束日期验证适用于日期在 html 值中也给出了。

$(document).ready(function() 

  $("#startDate").datepicker(
    dateFormat: 'yy-mm-dd',
    changeMonth: true,
    changeYear: true
  ).bind("change", function() 
    var minValue = $(this).val();

    minValue = $.datepicker.parseDate("yy-mm-dd", minValue);
    minValue.setDate(minValue.getDate() + 1);
    $("#endDate").datepicker("option", "minDate", minValue);

  );

  $("#endDate").datepicker(
    dateFormat: 'yy-mm-dd',
    changeMonth: true,
    changeYear: true

  ).bind("change", function() 

    var maxValue = $(this).val();
    maxValue = $.datepicker.parseDate("yy-mm-dd", maxValue);
    maxValue.setDate(maxValue.getDate() - 1);
    $("#startDate").datepicker("option", "maxDate", maxValue);

  );

  $(".ui-datepicker").css(
    "font-size": "12px"
  );

  $("#startDate").keydown(function(e) 
    e.preventDefault();
  );

  function validateQty(event) 
    var key = window.event ? event.keyCode : event.which;
    if (event.keyCode == 8 || event.keyCode == 46 ||
      event.keyCode == 37 || event.keyCode == 39) 
      return true;
     else if (key < 48 || key > 57) 
      return false;
     else return true;
  ;

);
<html>
<head>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet"/>


</head>
<body>
Start Date: <input type="text" id="startDate" value="2017-03-13"/>
End Date: <input type="text" id="endDate" value="2017-03-23" onkeypress='return validateQty(event);'/>
<input type="submit"/>
</body>
</html>

我已经添加了如下的jsfiddle代码:[在此处输入链接描述][1]

https://jsfiddle.net/Manishankarg/ncgg8t9x/1/

【问题讨论】:

您的链接将我带到jsfiddle.net的主页。 请立即查看。 所以,我删除了很多重复的代码,并同时应用了 prevent 默认值。那是你想要的吗? jsfiddle.net/nfnneil/ncgg8t9x/4 太好了,您将我的代码减少了一半,谢谢,但我的问题是您提供的验证第一次不起作用,即..,每当您运行应用程序时,如果您检查开始日期,日期选择器应限制用户添加的时间不超过结束日期。 【参考方案1】:

所以,我发现了代码的问题。您没有检查页面首次加载的时间。我修复了选择区域的代码。所以,这是新版本。我在页面加载时调用了输入事件,这样我们就可以立即运行我们的验证脚本。

https://jsfiddle.net/nfnneil/ncgg8t9x/6/

$(document).ready(function() 

  $("#startDate, #endDate").datepicker(
    dateFormat: 'yy-mm-dd',
    changeMonth: true,
    changeYear: true
  ).bind("change", function() 
    if ($(this).is("#startDate")) 
      var minValue = $(this).val();
      minValue = $.datepicker.parseDate("yy-mm-dd", minValue);
      minValue.setDate(minValue.getDate() + 1);
      $("#endDate").datepicker("option", "minDate", minValue);
     else 
      var maxValue = $(this).val();
      maxValue = $.datepicker.parseDate("yy-mm-dd", maxValue);
      maxValue.setDate(maxValue.getDate() - 1);
      $("#startDate").datepicker("option", "maxDate", maxValue);
    
  );

  $(".ui-datepicker").css(
    "font-size": "12px"
  );

  $("#startDate, #endDate").keydown(function(e) 
    e.preventDefault();
  );
  $("#startDate, #endDate").trigger("change");

);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

Start Date: <input type="text" id="startDate" value="2017-03-13"/>
End Date: <input type="text" id="endDate" value="2017-03-23" onkeypress='return validateQty(event);'/>
<input type="submit"/>

【讨论】:

感谢您的帮助,您发送的代码运行良好。

以上是关于如何使 Jquery datepicker 验证适用于默认值的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery 验证和 jquery-ui datepicker

jquery datepicker验证

Jquery Datepicker 和 Jquery 验证

如何使 jquery datepicker 默认日期为 mm-yyyy(字面意思)

如何在 MVC 4 中更改 jQuery DatePicker 中的验证文本?

jquery datepicker:验证当前输入值?