Jquery自定义日期验证器只工作一次

Jquery custom date validator works only once

本文关键字:一次 工作 自定义 日期 验证 Jquery      更新时间:2023-09-26

我在尝试向jQuery.validator:

添加自定义验证方法时遇到了一个问题。
$.validator.addMethod("fromDate", function (value, element) {
    var fromDateTime = moment(value, 'm/dd/yyyy HH:mm');
    var toDateTime = moment($("#endDate").val(), 'm/dd/yyyy HH:mm');
    if (fromDateTime.isValid() && toDateTime.isValid()) {
        return toDateTime.diff(fromDateTime) > 0;
    }
    return false;
}, "Start datetime should be less than end datetime");
$('#queryingDateForm').on('submit', function (e) {
    e.preventDefault();
    $('#queryingDateForm').validate({
        rules: {
            start: {
                required: true,
                fromDate: true
            }
        },
        submitHandler: function (form) {
            load();
        }
    });
});

这行代码只在第一次正确工作,所以验证只工作一次。

return toDateTime.diff(fromDateTime) > 0;

第二次,以此类推,它返回第一次返回的值

Html:

<form id="queryingDateForm">
    <div class="input-group input-daterange">
        <input class="form-control dateTimePicker" id="startDate" type="datetime" placeholder="Date Start" name="start" required  />
        <span class="input-group-addon">@QueryingResources.To</span>
        <input class="form-control dateTimePicker" id="endDate" type="datetime" placeholder="Date End" name="end" required />
        <div class="input-group-btn">
        <button type="submit" class="btn btn-success searchQuery" id="searchDateBtn">@QueryingResources.Search</button>
        </div>
    </div>
</form>

,这就是bootstrap datetimepicker的初始化方式:

$(".dateTimePicker").datetimepicker({
    autoclose: true,
    format: 'm/dd/yyyy hh:ii'
});

Thanks in advance

.validate()方法仅用于初始化插件

对于下面的版本,表单在验证插件初始化之前就已经在提交过程中了。

$('#queryingDateForm').on('submit', function (e) {
    e.preventDefault();
    $('#queryingDateForm').validate({ ....
  • 在提交事件启动后,验证如何发生 ?

  • 如何在没有插件初始化的情况下进行验证?

永远不要将.validate()方法放在submit事件(或click事件)处理程序中。


插件已经自动捕获点击并阻止表单的提交。它只是在页面加载时在DOM就绪事件处理程序中被调用…

$(document).ready(function () {
    $.validator.addMethod("fromDate", function (value, element) {
        // your function
        ....
    });
    $('#queryingDateForm').validate({ // initialize the plugin
        // your options
        ....
    });
});