防止表单redirect或刷新提交?

我search了一堆页面,但找不到我的问题,所以我不得不发表一个post。

我有一个提交button的表单,并提交时,我希望它不刷新或redirect。 我只是想让jQuery执行一个function。

这里是表格:

<form id="contactForm"> <fieldset> <label for="Name">Name</label> <input id="contactName" type="text" /> </fieldset> <fieldset> <label for="Email">Email</label> <input id="contactEmail" type="text" /> </fieldset> <fieldset class="noHeight"> <textarea id="contactMessage" cols="20"></textarea> <input id="contactSend" class="submit" type="submit" onclick="sendContactForm()" /> </fieldset> </form> <small id="messageSent">Your message has been sent.</small> 

这里是jQuery:

 function sendContactForm(){ $("#messageSent").slideDown("slow"); setTimeout('$("#messageSent").slideUp();$("#contactForm").slideUp("slow")', 2000); } 

我已经尝试过,没有在表单上的动作元素,但不知道我做错了什么。 让我更生气的是我有一个完美的例子: 例子页

如果你想看到我的问题现场,goto stormink.net (我的网站),并检查了它说“发送我和电子邮件”和“RSS订阅”的边栏。 两者都是我试图让这个工作的forms。

只需处理提交事件的表单提交,并返回false:

 $('#contactForm').submit(function () { sendContactForm(); return false; }); 

您不需要在提交button上更多的onclick事件:

 <input class="submit" type="submit" value="Send" /> 

这里:

 function submitClick(e) { e.preventDefault(); $("#messageSent").slideDown("slow"); setTimeout('$("#messageSent").slideUp(); $("#contactForm").slideUp("slow")', 2000); } $(document).ready(function() { $('#contactSend').click(submitClick); }); 

而不是使用onClick事件,你将使用绑定“click”事件处理程序使用jQuery到提交button(或任何button),这将采取submitClick作为callback。 我们将事件传递给callback来调用preventDefault ,这将阻止点击提交表单。

看起来你错过了一个return false

在窗体的开始标记中,设置一个action属性,如下所示:

 <form id="contactForm" action="#"> 

另一种解决scheme是不使用表单标签,并通过jQuery处理提交button上的点击事件。 这样就不会有任何页面刷新,但在同一时间有一个缺点,“提交”button不会工作,也在手机上,你不会得到一个去button(一些手机的风格)。 所以坚持使用表单标签并使用接受的答案。