1

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

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

SubmitHandler 是其中之一(在 setDefaults 方法中),它似乎不起作用。如果表单无效,我会在单击提交时获得默认页面。submitHandler() 是否有 return 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 验证插件处理多种表单?帮助将不胜感激。让我知道是否需要详细说明。

4

1 回答 1

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

演示:http: //jsfiddle.net/SySGN/1/

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


编辑2:

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

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

想用它做什么? 认为什么时候会success发生火灾? 为什么要在验证表单的过程中尝试加载新 URL?

引用操作:

“如果表单无效,我会在单击提交时获得默认页面”

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

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

success回调函数,根据 jQuery Validate docs

如果指定,则显示错误标签以显示有效元素。如果给出了 String,则将其作为 a 添加classlabel. 如果给定一个函数,它会被调用label(作为一个 jQuery 对象)和经过验证的输入(作为一个 DOM 元素)。可label用于添加诸如“ok!”之类的文本。

您已经使用 提交表单.ajax(),因此在过程中的任何时候重新加载页面都会破坏.ajax(). 我什至无法建议替代代码,因为我无法想象您要做什么。我只能说,在整个表单通过验证后,您只会在提交时使用回调来触发代码。submitHandler

您是否有可能将 jQuery Validate 与 jQuery Validatesuccess混淆.ajax() success?后者已经.ajax()您的submitHandler. 但是,再次,.ajax()允许您在不重新加载页面的情况下提交数据,因此重定向到另一个页面.ajax()完全没有意义。

于 2013-09-23T23:19:11.560 回答