8

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

默认情况下,会自动设置一些事件进行处理。即焦点输入/输出,所有输入触发验证的按键事件。我希望它仅在单击提交按钮时触发。

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

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

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

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

有人可以帮我吗?如果您需要更多详细信息,请告诉我。我搜索了谷歌,但收效甚微。

谢谢

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

4

1 回答 1

8

找到了答案。它作为 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);
            }
        });
    });
});
于 2010-05-04T05:56:23.930 回答