Jquery验证插件-submitHandler设置为默认可以跨多个表单工作?

时间:2013-09-23 22:48:48

标签: jquery ajax jquery-validate

我尝试使用JQuery Validate Plugin构建此验证模块,处理多个表单。所以,我决定将常用函数/规则放在插件提供的jQuery.validator.setDefaults()方法中。因此,只有插件的成功功能需要在不同的地方。

$("#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 个答案:

答案 0 :(得分:1)

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

$.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
    }
});

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

使用OP的内联类规则编辑了jsFiddle。仍在使用相同的工作。


编辑2:

我刚刚注意到你成功功能的内容。

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

你想用什么何时你认为success到底是什么? 为什么您会在验证表单的过程中尝试加载新的网址?

引用OP:

  

“如果表单无效,我会点击提交时显示默认页面”

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

success只是一个回调函数,只要元素传递验证,就会触发显示标签。它的设计目的就是在成功填写字段旁边放置图标等等。

The success callback function, as per jQuery Validate docs

  

如果指定,则会显示错误标签以显示有效元素。如果给出了字符串,则会将class添加到label。如果给出了一个Function,则使用label(作为jQuery对象)和验证的输入(作为DOM元素)调用它。 label可用于添加“ok!”等文本。

您已经使用.ajax()提交表单,因此在此过程中的任何一点重新加载页面都会导致.ajax()的整个目的失败。我甚至无法建议替代代码,因为我无法想象你想要做什么。我可以说的是,在整个表单通过验证后,你只需要 使用submitHandler回调来提交代码。

是否有可能将jQuery验证success.ajax() success混淆了?后者已经在<{1}}里面的.ajax()内。但是,submitHandler允许您在不重新加载页面的情况下提交数据,因此重定向到另一个页面会使.ajax()毫无意义。