如何覆盖自己的jQuery的验证方法?

时间:2013-12-04 16:09:36

标签: jquery jquery-validate

我使用jQuery验证方法,并设置了一些默认设置,如下面的

$.validator.setDefaults({
    errorContainer : "#msgErrors ul",
    errorLabelContainer: "#msgErrors",
    wrapper: "li",
    submitHandler: function(form) {
        lockScreen();
        if (typeof url !== 'undefined' && url != null) {
            loadContentViaAjax("tr#idElement", url, $(form).formSerialize(), "html");
        } else {
            form.submit();
        }
    },
    invalidHandler: function() {
        var divsMessages = $(".fadeOutAndEmpty");
        if (divsMessages.is(":animated")) {
            divsMessages.stop().removeAttr("style").show();
        }
    }
});

对于这些默认设置工作,我必须通过在我拥有的每个表单上调用validate方法来初始化表单。为实现这一目标,我在页面完全加载后调用了

$("form").validate()

在每个页面加载的外部JS文件中。这样,我的应用程序中的所有表单都将激活验证方法,但我没有定义任何规则,并且再次调用validate方法传递实际规则将无法完成工作。

有没有办法定义必须执行的规则,即使已经调用了validate方法,这些规则也会被执行?

1 个答案:

答案 0 :(得分:4)

引用OP:

  

“问题是,要使这段代码生效,我必须以我拥有的每种形式调用validate方法。”

这正是你应该做的事情,所以我不明白这是一个“问题”的原因或原因。

.validate()方法就是初始化插件以便在特定表单上工作的方式。与初始化任何其他jQuery插件的方式没什么不同瞄准一个元素。

您可以在.valdiate()内为一个目标表单设置选项,也可以在.setDefaults()中设置适用于页面上所有表单的选项。


引用OP:

  

“我认为通过在JSP中调用validate方法,我会覆盖该方法,但事实并非如此。”

不确定“覆盖方法”的含义,但.validate()只能在特定表单上调用一次。再次调用它将无能为力。


引用OP:

  

“这样做的问题是我无法放置任何验证规则。”

使用jQuery Validate插件,可以通过多种方式在表单上声明规则。

以下是两个非常简单的例子......


示例ONE - class

的内联HTML

<强> HTML

<form id="myform">
    <input type="text" name="field" class="required" />
</form>

<强>的jQuery

$(document).ready(function() {

    // set defaults for all forms on this page
    $.validator.setDefaults({
        // your defaults
    });

    // initialize plugin on form with id #myform
    $('#myform').validate();

});

DEMO:http://jsfiddle.net/pMp6d/


示例二 - 在.validate()

<强> HTML

<form id="myform">
    <input type="text" name="field" />
</form>

<强>的jQuery

$(document).ready(function() {

    // set defaults for all forms on this page
    $.validator.setDefaults({
        // your defaults
    });

    // initialize plugin on form with id #myform
    $('#myform').validate({
        rules: {
            field: {
                required: true
            }
        },
        // other options specific to this form
    });

});

DEMO:http://jsfiddle.net/pMp6d/1/



修改

如果您需要在之后声明规则,那么您已经调用了.validate(),那么您将使用.rules('add')方法。

DEMO:http://jsfiddle.net/pMp6d/2/

$('input[name="fieldName"]').rules('add', {
    required: true
});

或者,同时为所有input个元素分配相同的规则......

$('input').each(function() {
    $(this).rules('add', {
        required: true
    });
});

有关宣布规则的更多方法,请参阅此答案:https://stackoverflow.com/a/17792569/594235