为啥要添加“return false;”提交事件阻止页面刷新?

Posted

技术标签:

【中文标题】为啥要添加“return false;”提交事件阻止页面刷新?【英文标题】:Why does adding "return false;" to a submit event prevent the page from refreshing?为什么要添加“return false;”提交事件阻止页面刷新? 【发布时间】:2015-11-15 06:25:28 【问题描述】:

我正在做一个关于使用 Node.js 和 socket.io 制作聊天服务器的教程。这是我在 html 中的内容:

<form id='chat_form'>
  <input id='chat_input' />
  <button>Send</button>
</form>
<script type='text/javascript'>
var socket = io();
$('#chat_form').submit(function()
  var message = $('#chat_input').val();
  socket.emit('messages', message);
  $('#chat_input').val('');
);
</script>

我不会费心把我拥有的东西放在后端,因为那部分工作正常。但是在浏览器中,每次提交,页面都会刷新,并且在网址栏末尾添加了一个/?

环顾四周,发现另一个教程(socket.io 网站上的那个),代码基本相同,但他们在提交事件的末尾添加了return false;。试过了,效果很好。我想了解为什么会这样。谁能解释一下?另外,您能解释一下为什么将/? 添加到URL 中吗?

【问题讨论】:

返回假;阻止表单的操作,因此它停止提交表单,因为这是表单的操作(它是 this in jquery 的纯 js 版本)。您通常应该在带有 ajax 调用的表单提交上使用它(以阻止页面刷新)。如果您的表单上没有方法,它看起来好像在提交时使用了 get 方法,这就是为什么要添加 ?到 url 并刷新页面 - see this post LOL 我想知道为什么这个问题得到 4 票。这不属于 node.js 标签。我觉得唯一的原因是这个问题很容易回答:P 【参考方案1】:

先说说/?

表单提交的默认方法是GET,但是你可以用&lt;form method="POST"&gt;更改它(如果没有提供方法,默认是&lt;form method="GET"&gt;)。

使用POST 表单数据在请求body 中传递,使用GET - 在请求url params 中。

如果你有

<form action="/submit.php" method="GET">
   <input name="foo" value="1" />
   <input name="bar" value="2" />
</form>

然后您提交该表单,您将获得类似 /submit.php?foo=1&amp;bar=2 的 URL。

在您的情况下,您没有带有 name 属性的输入,因此您的 GET 参数是“空的”(/?&lt;params should go there&gt;)。

您可以阅读更多内容: http://www.w3schools.com/tags/att_form_method.asp

关于return false;

提交表单会强制页面重新加载(使用POSTGET 请求)。如果您使用javascript 提交表单,则需要阻止此默认操作。你可以这样做

$('#chat_form').submit(function(event)
    //....
    event.preventDefault();
);

或者return false;

【讨论】:

【参考方案2】:

一个简单易懂的答案是

“返回 false 阻止导航”

return false 总是在用户或浏览器操作需要被弯腰的情况下使用。

在每一种编程语言中,return 后的代码都不会被执行,这意味着不会发生进一步的动作,可以是

停止表单提交

停止导航和超链接跳转

除了return false你也可以使用

   event.preventDefault();

   event.stopPropagation();

现在关于表单提交

使用GETPOST 提交表单,这可以由作者使用form tag 中的method="POST" 属性决定,

当使用 GET 提交默认表单时没有给出任何内容时

在 url 中传递值 - ex - something.html?para1=value1&para2=value2

速度快但安全性较低,每次提交表单时,所有表单元素都会在 url 中传递

【讨论】:

【参考方案3】:

来自jQuery submit() 文档:

现在,当提交表单时,会发出警告消息。这发生在实际提交之前,因此我们可以通过在事件对象上调用 .preventDefault() 或从我们的处理程序中返回 false 来取消提交操作。

因此,正在阻止submit 事件发生时触发的默认事件行为。

jQuery 提交函数的默认提交方法是 HTML GET,它以 URL 查询的形式提供表单参数,格式为 /?queryParam=value。因此,/? 出现在 URL 中,在 /? 之后没有查询参数(因为表单中没有提供任何参数)。

希望这会有所帮助!

【讨论】:

【参考方案4】:

您的表单元素没有方法,因此设置了默认方法 get。如果点击发送,所有输入元素都添加在current page+之后?

return false 阻止执行提交操作。

【讨论】:

【参考方案5】:

返回 false 会阻止触发 html 元素事件的所有默认函数。

一个例子是一个 html 表单,一旦你点击提交按钮,它默认是导航到另一个页面。如果您使用 Ajax 函数在不离开页面的情况下将数据发送到服务器,您不希望发生这种情况。

另一种方法是将事件对象参数传递给事件函数。 然后在函数的开头键入event.preventDefault();。

以下链接很好地解释了为什么出现尾部斜杠。 https://webmasters.stackexchange.com/questions/35643/is-trailing-slash-automagically-added-on-click-of-home-page-url-in-browser

【讨论】:

以上是关于为啥要添加“return false;”提交事件阻止页面刷新?的主要内容,如果未能解决你的问题,请参考以下文章

在点击事件监听器中添加“return false”有啥效果?

为啥javascript在'return false'之后工作?

使用onsubmit return false 阻止form表单提交的方法介绍

解读event.returnValue和return false

return , return true , return false的区别

preventDefault()stopPropagation()return false 之间的区别