javascript - 防止表单在日期验证时提交

标签 javascript jquery validation

这是我的代码,其中比较两个日期并在跨度 block 中发出警报。
我想检查是否 CheckInDate < 今天 那么,不应提交表单。

$(document.getElementsByName("CheckInDate")).on("change", function () {
    var CheckInDate = $(document.getElementsByName("CheckInDate")).val();
    var today = new Date();
    var dd = today.getDate();
    var c = CheckInDate.split("-");
    var cdd = c[0];
    var cmm = c[1];
    var cyyyy = c[2];
    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 = dd+'-'+mm+'-'+yyyy;
    if((cyyyy < yyyy) || (cyyyy == yyyy && cmm < mm) || (cyyyy == yyyy && cmm == mm && cdd < dd))
    {
        document.getElementById("DateWarning").innerHTML = "WrongDate";
        /* Form Should not be submitted */
    }
    else
    {
        document.getElementById("DateWarning").innerHTML = "";
    }
});

我想阻止表单提交。我怎样才能做到这一点?

最佳答案

混合 jQuery 和 DOM 等几个问题

您想通过像这样 Hook 提交事件来阻止提交:

$(function() { // on load 
    $("#formId").on("submit", function (e) { // use the form submit event
      var CheckInDate = $("#CheckInDate").val();
      var today = new Date();
      var dd = today.getDate();
      var c = CheckInDate.split("-");
      var cdd = c[0];
      var cmm = c[1];
      var cyyyy = c[2];
      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 = dd+'-'+mm+'-'+yyyy;
      if((cyyyy < yyyy) || (cyyyy == yyyy && cmm < mm) || (cyyyy == yyyy && cmm == mm && cdd < dd)) {
        $("#DateWarning").html("WrongDate");
        e.preventDefault(); // cancel submission
      }
      else {
        $("#DateWarning").html("")
      }
    });
});

如果您想测试日期字段更改的日期,您需要一个可以重用的函数:

function checkDate() {
  var CheckInDate = $("#CheckInDate").val();
  var today = new Date();
  var dd = today.getDate();
  var c = CheckInDate.split("-");
  var cdd = c[0];
  var cmm = c[1];
  var cyyyy = c[2];
  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 = dd+'-'+mm+'-'+yyyy;
  if((cyyyy < yyyy) || (cyyyy == yyyy && cmm < mm) || (cyyyy == yyyy && cmm == mm && cdd < dd)) {
    $("#DateWarning").html("WrongDate");
    return false;
  }
  else {
    $("#DateWarning").html("");
    return true;
  }
}
$(function() {
  $("#formId").on("submit", function (e) { // use the form submit event
    if (!checkDate()) e.preventDefault();
  });     
});     

关于javascript - 防止表单在日期验证时提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34283710/

相关文章:

javascript - 服务器端ajax搜索,等待输入完成-多表

jquery - JSON Post 调用错误函数

javascript - 我如何为多个元素更改具有相同元素 ID 的 css

java - 在 Android 中的模式上使用 OR

validation - Flutter:验证 Radix 10 数字

javascript - 单击搜索按钮时如何记住 cookie 的值

javascript - 谷歌浏览器的奇怪用户代理

javascript - IE11 在 AJS 1.3 中闪烁,需要快速修复

jquery - jqgrid - 每页的项目

javascript - Angular 2 : Simple input validation