Jquery自定义日期验证器仅运行一次。

3

当我尝试将自定义验证方法添加到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({
    autoclose: true,
    format: 'm/dd/yyyy hh:ii'
});

提前感谢您的帮助。

1个回答

2

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

});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接