我正在使用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
我是否需要从方法中返回任何内容?
谢谢!
答案 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');
}