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

Jquery custom date validator works only once

我在尝试向 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;

第二次以此类推 returns 第一次返回的值。

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({
    autoclose: true,
    format: 'm/dd/yyyy hh:ii'
});

提前致谢

.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
        ....
    });

});