在jQuery验证插件中自定义事件委托

Rus*_*ell 7 validation jquery jquery-validate event-delegation

我目前正在设置jQuery验证插件,以便在我们的项目中使用.

默认情况下,会自动设置一些事件进行处理.即关注进/出,关键事件对所有输入进行火灾验证.我希望它只在单击提交按钮时触发.

这个功能似乎内置在插件中,这使得很难做到这一点(不修改插件代码,不是我想做的事).

我在插件代码原型方法中找到了eventDelegate函数调用:

        $(this.currentForm)
            .validateDelegate(":text, :password, :file, select, textarea", "focusin focusout keyup", delegate)
            .validateDelegate(":radio, :checkbox, select, option", "click", delegate);
Run Code Online (Sandbox Code Playgroud)

当我从插件中删除这些行时,我得到了我的结果,但是我更愿意在插件之外做一些事情来实现这一点.

有人可以帮帮我吗?如果您需要更多详细信息,请告诉我们.我搜索谷歌几乎没有成功.

谢谢

编辑:我基本上尝试验证表单只有在触发提交事件时.默认情况下,每次输入控件中的焦点丢失时,插件都会进行验证.

Rus*_*ell 7

找到了答案.它是(隐藏?)作为validate方法中选项的一部分.

请参阅此页面上的onfocusout等选项:http://docs.jquery.com/Plugins/Validation/validate#options

我可以设置为假.

这是我的代码设置我的验证器(希望其他人会发现这有用):

$(document).ready(function() {
    $("form").each(function() {
        $(this).validate({
            validateDelegate: function() { },
            onsubmit: true,
            onkeydown: false,
            onkeyup: false,
            onfocusin: false,
            onfocusout: false,

            errorContainer: "#PanelError",
            errorLabelContainer: "#PanelError ul",
            wrapper: "li",
            ignoreTitle: true,
            errorClass: "Error",

            highlight: function(element, errorClass, validClass) {
                $(element).addClass(errorClass).removeClass(validClass);
                $(element.form).find("#" + element.id)
                        .addClass(errorClass);
            },
            unhighlight: function(element, errorClass, validClass) {
                $(element).removeClass(errorClass).addClass(validClass);
                $(element.form).find("#" + element.id)
                        .removeClass(errorClass);
            }
        });
    });
});
Run Code Online (Sandbox Code Playgroud)