为什么向提交事件添加“返回false”会阻止页面刷新?
我正在做一个关于使用Node.js和socket.io创build聊天服务器的教程。 这是我在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>
我不会打扰我把它放在后端,因为这一切都运行良好。 但在浏览器中,每当我提交,页面刷新,和/?
已被添加到URL栏的末尾。
看了一下,发现另一个教程(在socket.io网站上的),基本上有相同的代码,但他们已经添加了return false;
到他们的提交事件结束。 试过了,它工作正常。 我想了解为什么这个工作。 谁能解释一下? 另外,你能解释为什么/?
被添加到url?
首先关于/?
:
表单提交的默认方法是GET
,但您可以使用<form method="POST">
更改它(如果未提供方法,则默认为<form method="GET">
)。
用POST
表单数据在请求body
传递,用GET
-in请求的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
属性的input,所以你的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;
。
一个简单和容易的答案是
“返回false防止导航”
在需要弯曲用户或浏览器操作的情况下,总是使用返回false。
在每一种编程语言中,返回后的代码都不会被执行,这意味着进一步的行为不会发生,这可能是
停止表单提交
停止导航和超链接跳转
除了return false
还可以使用
event.preventDefault(); event.stopPropagation();
现在关于表单提交
表单使用GET
和POST
提交,可以由作者在form tag
使用method="POST"
属性来决定,
当没有什么默认forms提交使用GET
它通过URL中的值 – ex – something.html?para1 = value1&para2 = value2
这是快速和不太安全的,每次你提交一个表单获取所有的表单元素将在URL中传递
从jQuery submit()
文档:
现在当表单被提交时,消息被警告。 这发生在实际提交之前,所以我们可以通过在事件对象上调用.preventDefault()或者从我们的处理程序返回false来取消提交操作。
所以发生的事情是, submit
事件发生时触发的默认事件行为正在被阻止。
jQuery提交函数的默认提交方法是HTML GET
,以/?queryParam=value
的forms提供表单参数作为URL查询。 因此, /?
出现在URL中,没有查询参数后面的/?
(因为没有提供的forms)。
希望这可以帮助!
返回false可以防止所有html元素事件的默认函数被触发。
一个例子是一个HTML表单,一旦你点击提交button,它的默认是导航到另一个页面。 如果您使用Ajax函数在不离开页面的情况下将数据发送到服务器,则不希望发生这种情况。
另一种方法是将事件对象parameter passing给事件函数。 然后在函数的开始处inputevent.preventDefault();.
下面的链接提供了一个很好的解释为什么尾随斜线存在。 https://webmasters.stackexchange.com/questions/35643/is-trailing-slash-automagically-added-on-click-of-home-page-url-in-browser
你的表单元素没有方法,所以默认方法get被设置。 如果你点击发送所有的input元素被添加到current page
+之后?
return false
阻止提交操作执行。