-1

我正在使用 jquery 验证插件并且工作正常。我在两个地方重复了验证逻辑,一个是提交表单,另一个是关注焦点。现在我试图将它提取到一个方法中并在需要的地方重用它。我正在尝试如下。

$(document).ready(function() {

     validateForm();  

    function validateForm(){
            $("#myForm").validate({
              onfocusout: function(element) { jQuery(element).valid(); } ,
              rules:{
                attribute: "required"
            },
            messages:{
                attribute: "Required field"
            }
        });

      }


   $('#myForm #submit').click(function(e) {

            e.preventDefault();


    var validator = validateForm();  //here it shows error line

    if(validator.form()){ 
          //do something
        }
});


});

如果我提取上述逻辑,则会收到如下脚本错误。

Error: 'Undefined' is null or not an object

我需要从方法中返回任何东西吗?

谢谢!

4

2 回答 2

1

我对验证插件没有任何经验,但我可以告诉你你得到参考错误的原因是因为它完成执行后会自动validateForm()返回。undefined

我猜这form()是对象$().validate()返回的一个方法,如果是这样,你需要做的就是让validateForm()返回结果validate()像这样

function validateForm(){
    return $("#myForm").validate({ /* options */ });
}

祝你好运!

编辑:另外,你为什么要validateForm()在准备好的文档上调用 - 当然,表单就是当时标记中的任何内容......

于 2013-08-20T07:35:15.183 回答
0

您将调用 validateForm 函数的结果分配给验证器变量。没有 return 语句的函数默认返回undefined。而且我看不到,您在哪里定义表单方法。

您可以向您的 validateForm 函数添加一个参数 - 您要验证的表单的 id 并将其编写如下:

function validateForm(id) {
    $(id)...
}

然后调用它

validateForm('#myForm');

或者

$('#anotherForm #submit').click(function(e) {
    e.preventDefault();
    validateForm('#anotherForm');
}
于 2013-08-20T07:43:15.697 回答