jQuery验证插件,使用自定义方法单击按钮时验证错误

jQuery验证插件,使用自定义方法单击按钮时验证错误,jquery,methods,click,jquery-validate,Jquery,Methods,Click,Jquery Validate,我使用jQuery验证插件 在我的例子中,虽然“onkeyup”、“onfocusout”方法处于启用状态,但在单击按钮时会进行验证。我为输入添加了自定义方法/规则 问题是: 当我单击按钮时,验证只在选择时发生,而不是在输入时发生。在这种情况下,将忽略新规则。但当我在输入中键入文本时,规则就起作用了。 如何解决这个问题 $(function() { // Added new method/rule $.validator.addMethod( "testm",

我使用jQuery验证插件

在我的例子中,虽然“onkeyup”、“onfocusout”方法处于启用状态,但在单击按钮时会进行验证。我为输入添加了自定义方法/规则

问题是:

当我单击按钮时,验证只在选择时发生,而不是在输入时发生。在这种情况下,将忽略新规则。但当我在输入中键入文本时,规则就起作用了。 如何解决这个问题

$(function() {
    // Added new method/rule
    $.validator.addMethod(
        "testm",
        function(value, element) {
            return this.optional(element) || /^[0-9]+$/.test( value );
        },
        "Use a valid username."
    );

    $("#ftest").validate({
        ignore: ".ignore, :hidden",
        focusInvalid: true,
        rules: {
            i1:"required",
            i2: {
                testm: true
            }
        },
        messages: {
            i1: "error1",

        }
    });

    // I need to check whether form is valid when I click the button
    $("#btest").click(function() {
        //alert('asd');
        var valid = $("#ftest").valid();
        if(valid)
        {
            alert('good');
        }
        else {
            alert('bad');
        }
    });
})

为了使空输入无法通过验证,您需要从testm验证方法中删除这一行:

这个元素是可选的||


我的疏忽,我的错误。非常感谢。这正是我所需要的。注意:您应该完全删除行焦点。这已经是此选项的默认状态。正如文档中有时提到的,将某些选项设置为默认值可能会破坏插件。如果已声明,则此选项应仅设置为false。如果希望该选项为true,则不应声明该选项。另一个注意事项:您根本不需要$btest.click处理程序函数。这只是复制插件的默认行为。只需确保您的按钮是type=submit,其余按钮是自动的!请参阅:~您甚至不需要submitHandler或invalidHandler回调函数;我添加这些只是为了演示您的警报。