需要按两次提交提交带有ajax的表单(jqueryvalidation插件)

在使用此插件提交之前,表单已经过validation。 并按代码中的说明提交:

jQuery.validator.setDefaults({ submitHandler: function(){ jQuery("form").submit(function(e) { e.preventDefault(); jQuery.post(base_url + "blog/ajax_comment", { author: jQuery("#author").val(), email: jQuery("#email").val(), url: jQuery("#url").val(), message: jQuery("#message").val() , post_ID: jQuery("#post_ID").val(), not: jQuery("#not").val() }, function (data) { //do stuff here }); }); } }); jQuery().ready(function() { // validate the comment form when it is submitted jQuery("#commentform").validate(); }); 

要提交,我需要按两次提交按钮。 我是jQuery的新手,我不知道为什么会这样。 有没有一种简单的方法来解决这个问题?

submitHandler已经覆盖了默认事件,所以只需将ajax提交的代码放在那里:

 jQuery.validator.setDefaults({ submitHandler: function(){ jQuery.post(base_url + "blog/ajax_comment", { author: jQuery("#author").val(), email: jQuery("#email").val(), url: jQuery("#url").val(), message: jQuery("#message").val() , post_ID: jQuery("#post_ID").val(), not: jQuery("#not").val() }, function (data) { //do stuff here }); } }); 

如果您的元素具有与其ID匹配的name属性,请使用.serialize() ,如下所示:

 jQuery.validator.setDefaults({ submitHandler: function(form){ jQuery.post(base_url + "blog/ajax_comment", jQuery(form).serialize(), function (data) { //do stuff here }); } }); 

当前代码发生的事情是,在submit处理程序中,它为下次 附加一个新的 submit处理程序,而不是实际运行代码。 相反,只需在submitHandler回调中直接运行代码即可。