2013-09-23 25 views
1

我正在尝试使用JQuery Validate Plugin构建此验证模块,工作跨多个表单。所以,我决定将通用函数/规则放在插件提供的jQuery.validator.setDefaults()方法中。所以,只有插件的成功功能需要在不同的地方。Jquery验证插件-submitHandler设置为默认可在多个表单中工作?

$("#myForm").validate(
    success: function(label){ 
     window.location = someURL; 
    } 
); 

SubmitHandler是其中的一个(在setDefaults方法中),它似乎没有工作。如果表单无效,我将点击提交获取默认页面。是否有submitHandler()返回false或preventDefault()类的东西?

$.validator.setDefaults({ 
    submitHandler: function(form){ 
    var url = $(form).attr('action') ; 
    var data = $(form).serialize()+'&ajax_validation=1'; 
    $.ajax({ 
     url: url, 
     data: data, 
     type: 'POST', 
     success: function(response) { 
     //something 
     } 
    }); 
    } 
}); 

任何人都可以帮忙吗?有人试图用jQuery验证插件来处理多个表单?帮助将不胜感激。让我知道是否需要阐述。

回答

1

submitHandler回调末尾添加return false以防止默认表单操作。

$.validator.setDefaults({ 
    submitHandler: function(form) { 
     var url = $(form).attr('action') ; 
     var data = $(form).serialize()+'&ajax_validation=1'; 
     $.ajax({ 
      url: url, 
      data: data, 
      type: 'POST', 
      success: function(response) { 
       //something 
      } 
     }); 
     return false; // <-- add this line 
    } 
}); 

DEMOhttp://jsfiddle.net/SySGN/1/

编辑的jsfiddle与OP的直列班规。仍然工作一样。


编辑2:

我只注意到你的成功函数的内容。

$("#myForm").validate(
    success: function(label){ 
     window.location = someURL; // <-- WHY?! 
    } 
); 

什么你想与做? 当你想到发生火灾时,success为什么你会尝试在验证表单的过程中加载新的URL?

报价OP:

“我得到的点击提交,如果形式是无效的默认页”

这是因为,只要你填写第一个字段success触发并将页面重定向到someURL。如果您在完成之前更改为新页面,您希望用户如何填写表格?

success是一个简单的回调函数触发来显示标签每当元件通过验证。它专为诸如在成功填写字段旁放置图标等内容而设计。

The success callback function, as per jQuery Validate docs

如果指定,则显示错误标签来显示有效元素。如果给出字符串,则将其作为class添加到label。如果给出了一个函数,它会被调用label(作为一个jQuery对象)和经过验证的输入(作为一个DOM元素)。 label可以用来添加文字,如“OK!”。

你已经提交形式.ajax(),在过程中的任何点,以便重新加载页面违背了.ajax()的全部目的。我甚至无法建议替代代码,因为我无法想象你想要做什么。我只能说只有在整个表单通过验证后使用submitHandler回调来提交代码。

难道你得到了jQuery验证success混淆.ajax()success?后者已在里面.ajax()这是在submitHandler里面。但是,.ajax()再次允许您提交数据而无需重新加载页面,因此重定向到另一个页面使得.ajax()完全没有意义。

+0

嗨,斯帕克,谢谢你的答案。不过,我认为问题是这样的:验证插件仅验证第一个无效元素,然后提交表单。我甚至在我的所有输入字段中都有名称属性。自2天以来一直在此。你能帮我吗? – Meet

+0

此外,我没有使用规则,只有class =“required”在输入字段中,因为这就是我现在想要的。 – Meet

+0

** Quote @ Meet **:_“这些是你的规则,但没有区别......仍然工作正常:http: //jsfiddle.net/SySGN/1/ – Sparky

相关问题