Javascript 是否防止表单在提交时重定向或刷新?

Javascript 是否防止表单在提交时重定向或刷新?,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,我已经搜索了很多页面,但是找不到我的问题,所以我不得不发一篇帖子 我有一个表单,有一个提交按钮,提交时,我希望它不刷新或重定向。我只想让jQuery执行一个函数 以下是表格: <form id="contactForm"> <fieldset> <label for="Name">Name</label> <input id="contactName" type="text" /> <

我已经搜索了很多页面,但是找不到我的问题,所以我不得不发一篇帖子

我有一个表单,有一个提交按钮,提交时,我希望它不刷新或重定向。我只想让jQuery执行一个函数

以下是表格:

<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>
我尝试过在表单上使用和不使用动作元素,但不知道我做错了什么。更让我恼火的是,我有一个完美的例子:


如果你想看到我的问题现场直播,转到(我的网站)并查看边栏上的“发送我和电子邮件”和“RSS订阅”。这两个表单都是我正在尝试处理的表单。

看起来您缺少了一个
返回false
只需处理事件中的表单提交,然后返回false:

$('#contactForm').submit(function () {
 sendContactForm();
 return false;
});
您不再需要提交按钮上的onclick事件:

<input class="submit" type="submit" value="Send" />
$('form input[type=submit]').on('click', function(event) {
   event.preventDefault();
   my_form_treatment(this, event);
}); // -> this will NOT show any popups related to HTML attributes

此处:

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

$(document).ready(function() {
    $('#contactSend').click(submitClick);
});

不使用onClick事件,而是使用jQuery将“click”事件处理程序绑定到submit按钮(或任何按钮),该按钮将submitClick作为回调。我们将事件传递给回调调用,这将阻止单击提交表单。

另一种解决方案是不使用表单标记,并通过jquery处理提交按钮上的单击事件。这样就不会有任何页面刷新,但同时也有一个缺点,即“输入”按钮提交不起作用,而且在手机上你也不会得到一个go按钮(在某些手机中是一种风格)。因此,请坚持使用表单标记并使用接受的答案。

在表单的开始标记中,设置如下操作属性:

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

如果要查看显示的默认浏览器错误,例如,由HTML属性触发的错误(在任何客户端代码处理之前显示):

因为,
return false
将停止传播(即,如果表单提交附加了更多处理程序,则不会执行这些处理程序),但在这种情况下,浏览器触发的操作将始终首先执行。即使在结尾处有
返回false

因此如果您想清除这些默认弹出窗口,请使用提交按钮上的
单击事件:

<input class="submit" type="submit" value="Send" />
$('form input[type=submit]').on('click', function(event) {
   event.preventDefault();
   my_form_treatment(this, event);
}); // -> this will NOT show any popups related to HTML attributes

我记得当我知道从提交到不提交可以返回false的时候,我也开始真正喜欢Javascript/DOM系统。太棒了。我在哪里可以找到说明
false
阻止提交的规范文档?如果使用JQuery,您应该真正使用e.preventDefault(),而不只是返回false..@Juan。@RogerFilmyer搞错了。如果您使用“return false”,您也将停止传播,这将导致用户体验问题。例如,如果您希望出现“单击”气泡或类似情况。$(“#contactSend”)。单击(submitClick(e));它告诉我“e”没有定义/应该是
$('#contactSend')。单击(函数(e){submitClick(e)})
$('#contactSend')。单击(提交单击)+1表示简单的解决方案。但不幸的是,当用户第一次点击enter时,页面仍然会刷新。一个糟糕的解决方法是调用
myForm.submit()
尽快,但您将加载页面两次。第一次不会刷新。此答案需要否决,因为它无法解决原始问题,并且在页面重新加载后实际更改url会使情况变得更糟。您需要在onsubmit函数的
e.preventDefault()
中或在
中返回false
$('form input[type=submit]').on('click', function(event) {
   event.preventDefault();
   my_form_treatment(this, event);
}); // -> this will NOT show any popups related to HTML attributes