2013-09-21 47 views
1

工作之前,我甚至写我的问题,我想指出,我读过关于这个StackOverflow的众多职位,我还是我运行到同样的问题。基本上,无论我改变我的代码的方式有多少,我的表单仍然会提交,而无需先验证每个区域是否已填充。这是我的代码。jQuery验证不以AJAX

<form id="contact" method="post" action="E-mail-form.php" name="EmailFromMyWebsite"> 

       <label for="name">Name</label> <br> 
       <input type="text" name="name" class="required" placeholder="Your Name" title=" (Your name is required)"> <br /> 

       <label for="email">E-mail</label> <br> 
       <input type="email" name="email" class="required email" placeholder="[email protected]" title=" (Your email is required)"> <br /> 

       <label for="message">Message/Comment</label> <br> 
       <textarea name="message" class="required" placeholder="Leave a brief message" title=" (Please leave me a brief message)"></textarea> <br /> 

       <input type="button" name="submit" id="submit" value="Send Message" /> 
      </form> 

$(document).ready(function(){ 
$('#contact').validate({ 
    rules: { 
     name: {required: true}, 
     email: {required: true}, 
     message: {required: true} 
    }, 
    submitHandler: $(function(form){ 

     $("#submit").on('click', function(){ 
      var formData = $('#contact').serialize(); 
      $.ajax({ 
       type:"POST", 
       data:formData, 
       url:"E-mail-form.php", 
       done: function(data){ 
        $('#contact').html('<p>Your message has been sent. I will reply to you shortly.</p>'); 
       }, 
       fail: function(data) { 
        $('#contact').html('<p>Sorry there was a problem your message was NOT sent.</p>'); 
       } 
      }); 
      return false; 

     }); 
    }) 
}); 
}); 

现在我想有人会注意到的第一件事是,我对提交的功能,但我已经试过去除和我的形式根本不会甚至与submitHandler提交。我认为这就是问题发生的地方,因为当我看到有这个问题的其他论坛时,我不明白是什么导致表单没有提交就实际提交。任何帮助或解释都会非常有帮助。

+0

哪里是表单的标记? – Sparky

+0

对不起,刚添加它。 – London804

回答

2

报价OP:

“现在我想的第一件事,有人要注意的是,我有 上提交的功能,但我已经试过去除和我简单地形成 韩元“t用submitHandler甚至提出,我认为这也正是 问题发生,因为当我看着其他论坛这个 问题,我不明白是什么原因造成的形式,以实际提交 没有这一点。任何帮助或说明会非常有帮助。“

您需要更仔细地查看这些工作示例的语法,而不是插入随机事件处理程序。把一个click处理程序submitHandler这是只有按钮被点击后解雇内使绝对没有任何意义。

因为jQuery验证插件已经有内置1英寸即使你没有使用submitHandler回调选项,插件会自动捕捉按钮的click事件(只要表单提交,而不click处理程序这是一个type="submit"),并适当地处理它。然而,在这种情况下,你仍然需要定义submitHandler回调,因为它是在您.ajax()所属。

所以删除click处理程序。

而且,你的代码有语法错误:

submitHandler: $(function(form){ 
    // your ajax   
}) 

你不把$()在你的回调函数。

这是简单:

submitHandler: function(form) { 
    // your ajax 
} 

或与您的代码...

submitHandler: function (form) { 
    var formData = $(form).serialize(); // <- use the "form" argument here 
    $.ajax({ 
     .... 
    }); 
    return false; 
} 

最后,你的按钮需要有type="submit"为了使插件捕捉到它。

<input type="submit" name="submit" id="submit" value="Send Message" /> 

工作DEMOhttp://jsfiddle.net/x4h8L/

+0

我感谢您的意见,并感谢您的帮助,但您的脚本无法在我的网站上运行。它似乎没有被解雇,这是我一直以来的问题。当我点击提交时没有任何反应,当我看着你的脚本时,我不明白SubmitHandler是如何工作的,因为它没有附加到任何事件。这就是为什么最初我添加$(“#submit”)。on('click',function(){var formData = $('#contact')。serialize(); – London804

+0

@ London804,你的按钮并没有被插件捕获,因为它不是'type =“submit”'(为什么在OP_中包含你的HTML很重要)。即使我没有看到你的标记并给出解决方案,只是比较我的工作jsFiddle到您的网站的代码,以找到问题。 – Sparky

+0

仍然无法正常工作,它现在验证但提交没有做任何事情。但我注意到一些不应该var forData = $('#contact')而不是'form',因为contact是表单的标题,这就是我想要序列化的结果? – London804