我在表单上使用 jquery .validate() 后 jQuery .submit() 不起作用

Posted

技术标签:

【中文标题】我在表单上使用 jquery .validate() 后 jQuery .submit() 不起作用【英文标题】:jQuery .submit() doesn't work after i use jquery .validate() on a form 【发布时间】:2014-05-18 09:46:11 【问题描述】:

我有一个触发表单提交的按钮:

$('#formButton').click(function(e) 
  $('#form').submit();
);

当我添加一个表单验证器时,它不再提交任何东西(不做任何事情):

  var validate= $('#form').validate(
    "rules": 
      "name": 
         "required": true
      
    
  );

这就是我想要做的,但就像我说的那样,一旦我使用 .valiate() 函数,.submit() 函数就不会做任何事情:

$('#formButton').click(function(e) 
  if (validate.form() === false) 
    e.preventDefault();
   else 
    $('#form').submit();
  
);

我不能使用 ajax 代替 .submit(),因为我有一些输入类型为“文件”,据我所知,我不能 .serialize() 用于此类输入类型。

有什么建议为什么在我使用 .validate() 后 .submit() 函数会停止提交?

【问题讨论】:

jQuery Validation - Works, but doesn't "submit" 的可能重复项 【参考方案1】:

validate 方法阻止submit 事件的默认操作,当您提交表单时调用validate 方法。如果要在表单字段有效时提交表单,则应在传递给validate方法的对象上定义submitHandler函数:

$('#form').validate(
    "rules": 
      "name": 
         "required": true
      
    ,
    submitHandler: function(form) 
        form.submit();
    
);

由于form 参数是一个原始DOM 元素,调用它的submit 方法不会调用validate 方法。如果您不想定义上述方法,您可以使用 .get() 方法获取原始 DOM 元素并将其称为 submit 方法:

$('#form').get(0).submit();

【讨论】:

这是一个常见问题解答。 +1 但实际上它是一个巨大的重复

以上是关于我在表单上使用 jquery .validate() 后 jQuery .submit() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery Validate 正确验证放置在多个选项卡上的 Twitter 引导表单?

使用 .on 和 .validate 的 jQuery 必须提交两次表单才能验证

jquery.validate使用攻略(表单校验)

jquery.validate.js使用之自定义表单验证规则

jquery validate 表单验证插件

表单验证——jquery validate使用说明