为什么向提交事件添加“返回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;

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

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

或者return false;

一个简单和容易的答案是

“返回false防止导航”

在需要弯曲用户或浏览器操作的情况下,总是使用返回false。

在每一种编程语言中,返回后的代码都不会被执行,这意味着进一步的行为不会发生,这可能是

停止表单提交

停止导航和超链接跳转

除了return false还可以使用

  event.preventDefault(); event.stopPropagation(); 

现在关于表单提交

表单使用GETPOST提交,可以由作者在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阻止提交操作执行。