为啥要添加“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
,但是你可以用<form method="POST">
更改它(如果没有提供方法,默认是<form method="GET">
)。
使用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&bar=2
的 URL。
在您的情况下,您没有带有 name
属性的输入,因此您的 GET
参数是“空的”(/?<params should go there>
)。
您可以阅读更多内容: http://www.w3schools.com/tags/att_form_method.asp
关于return false;
提交表单会强制页面重新加载(使用POST
或GET
请求)。如果您使用javascript
提交表单,则需要阻止此默认操作。你可以这样做
$('#chat_form').submit(function(event)
//....
event.preventDefault();
);
或者return false;
。
【讨论】:
【参考方案2】:一个简单易懂的答案是
“返回 false 阻止导航”
return false 总是在用户或浏览器操作需要被弯腰的情况下使用。
在每一种编程语言中,return 后的代码都不会被执行,这意味着不会发生进一步的动作,可以是
停止表单提交
停止导航和超链接跳转
除了return false
你也可以使用
event.preventDefault();
event.stopPropagation();
现在关于表单提交
使用GET
和POST
提交表单,这可以由作者使用form tag
中的method="POST"
属性决定,
当使用 GET 提交默认表单时没有给出任何内容时
在 url 中传递值 - ex - something.html?para1=value1¶2=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