将验证逻辑提取到重用方法中?

时间:2013-08-20 07:13:46

标签: javascript jquery html

我正在使用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

我是否需要从方法中返回任何内容?

谢谢!

2 个答案:

答案 0 :(得分:1)

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

我猜测form()是对象$().validate()返回的方法,如果是这样,您需要做的就是让validateForm()返回validate()的结果所以

function validateForm(){
    return $("#myForm").validate({ /* options */ });
}
祝你好运!

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

答案 1 :(得分:0)

为调用validateForm函数的结果分配验证器变量。默认情况下,没有return语句的函数返回 undefined 。我没有看到,你在哪里定义表单方法。

您可以在validateForm函数中添加一个参数 - 要验证的表单的ID,并将其写为:

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

然后调用它

validateForm('#myForm');

$('#anotherForm #submit').click(function(e) {
    e.preventDefault();
    validateForm('#anotherForm');
}