使用 jquery-validate.How 更改仅一个元素的触发验证时间,其他元素保持默认

Using jquery-validate.How to change the timing of trigger validating of only one element with other elements stay default

我正在编写一个用于注册和使用 jquery-validate 进行验证的页面。 我的问题的一个简单示例如下。

JS 代码

$("#registerForm").validate({
    rules : {
        "loginname" : {
            required : true,
            minlength : 6,
            maxlength : 20
        },
        "phoneMessage" : {
            remote : {
                url : "phoneMessageValidate.do",
                type : "post",
                dataType : "json",
                data : {
                    phoneMessage : function() {
                        return $("#phoneMessage").val();
                    }
                },
            },
        },
    },
    submitHandler : function(form) {
        form.submit();
    }
})         //edition:jquery-1.11.3   jquery-validation-1.14.0
<form id="registerForm">
    <input type="text" id="loginname" name="loginname"></input>
    <input type="text" id="phoneMessage" name="phoneMessage"></input>
    <input type="submit" value="submit"></input>
</form>

默认情况下,所有元素在焦点外时都会被验证。很有用,但在这种情况下,我的要求是:

  1. phoneMessage 被验证仅当提交表单时,而 其他元素保持默认设置。
  2. 任何元素的无效状态都会阻止表单的提交。

通过搜索jquery-validate的介绍网站:

http://jqueryvalidation.org/validate#onfocusout

我发现我们可以通过在验证函数中设置参数"onfocusout = false"来改变触发验证的时间。 由于两个元素是在同一个验证函数中定义的,我该如何更改其中一个的验证?

  1. The phoneMessage is validated only when the form is submitted, while other element stay default setting.

简单地用条件函数覆盖onfocusout函数。

onfocusout: function(element) {
    if (element.name === "phoneMessage") {
        // Disable `onfocusout` for 'phoneMessage' element
        return false;
    } else { 
        // DEFAULT `onfocusout` function
        if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element))) {
            this.element(element);
        }
    }
}

演示:https://jsfiddle.net/z73efhjz/

  1. The invalid status of any elements can block the submit of form.

这已经是插件的默认行为。

仅供参考- <input> 标签不是容器元素,因此没有 </input> 标签这样的东西。