AJAX和jQueryvalidation问题

所以我陷入了这个死胡同。 我有AJAX脚本和jQuery Validation插件。 使用此脚本,当我的页面加载空联系表单时自动提交。 如果我移动或添加$('#submit').click(function () {通过AJAX脚本部分,正好在$(document).ready(function() {然后提交它忽略我的validation表单。

任何帮助将不胜感激。

    var captcha_a = Math.ceil(Math.random() * 10); var captcha_b = Math.ceil(Math.random() * 10); var captcha_c = captcha_a + captcha_b; function generate_captcha(id){ var id = (id) ? id : 'lcaptcha'; $("#"+id).html(captcha_a + " + " + captcha_b + " = "); } $(document).ready(function() { $('#submit').click(function () { jQuery.validator.addMethod("math", function(value, element, params) { return this.optional(element) || value == params[0] + params[1]; }, jQuery.format("Please enter the correct value for {0} + {1}") ); $("#commentform").validate({ rules: { captcha: { math: [captcha_a, captcha_b] } } }); }); })   $(document).ready(function() { var name = $('input[name=name]'); var phone = $('input[name=phone]'); var email = $('input[name=email]'); var reason = $('select[name=reason]'); var info = $('textarea[name=info]'); var data = 'name=' + name.val() + '&phone=' + phone.val() + '&email=' + email.val() +'&reason=' + reason.val() + '&info=' + encodeURIComponent(info.val()); $('.loading').show(); $.ajax({ url: "ajaxformtoemail.php", type: "GET", data: data, cache: false, success: function (html) { if (html==1) { $('.form').fadeOut('slow'); $('.done').fadeIn('slow'); } else alert('Sorry, unexpected error. Please try again later.'); } }); return false; });  

你的ajax在页面加载时运行,因为没有什么能阻止它。 您需要将ajax代码放在事件处理程序中,这样只有在表单通过validation时才会调用它。

以下是Validation Plugin正确实现的示例。 而且您不需要将validate()放在单击处理程序中。 Validation插件内置了一堆自己的处理程序,包括一个在表单通过validation时触发的submitHandler

  

validation插件文档

一些方面问题……

  1. 如果使用适当的缩进和标准格式,您的代码将更容易阅读和故障排除。

  2. 不需要使用重复的document.ready函数。 一切都在一个人的内心。

  3. 与#2类似,您不需要单独的标记集来包含您的代码。 一切都可以封闭一次。