preventDefault和类型如何使用表单提交?

问题描述 投票:0回答:2

因此,当我使用JS并尝试提交输入时,我尝试了几件事,有些奇怪的事情我不理解逻辑。

  1. <input tpye="submit/>标签的内部和外部的<form>之间存在差异。如果它在表单标签内,则需要使用preventDefault()函数,但是如果它在表单标签外,则无需编写简单的JS vanilla代码。为什么会这样?

  2. onsubmit和onclick有什么区别?特别是在表单标签中因为如果我使用onsubmit,那么js代码实际上是行不通的。

  3. 如果我使用preventDefault(event),它将阻止将表单发送到服务器,而是仅使用浏览器进行计算?

谢谢!

javascript forms submit form-submit
2个回答
1
投票

默认情况下,如果您在表单中输入的类型为“提交”,则单击该输入(或在填写表单中的任何输入后单击回车键,都会向服务器发送帖子或获取请求,从而重定向当前页面服务器的响应。

这是不使用JavaScript即可将表单数据提交到服务器的原始方法。如果要防止这种情况发生,可以用一个普通按钮(<button onclick="doSomething()">Submit</button>)替换提交输入,也可以防止默认的提交事件:(form.onsubmit = event => event.preventDefault())。

onsubmitonclick之间的区别在于,onsubmit仅在从表单发出提交事件时才触发。要发出一个提交事件,该表单需要单击<input type="submit">,或者供用户通过按Enter来触发提交。

防止这种默认行为的另一种方法是在提交处理程序中将其设置为return false

onclick仅在单击元素时被触发。由于javascript中的事件会传播到父级,因此这也会触发所有父级元素上的所有onclick处理程序。

如果要完全忽略默认的表单提交行为,则可以定义一个带有onclick处理程序的按钮来处理您的自定义提交逻辑。


1
投票
  1. 如果您在表单中有type="submit"输入(NoteThe default value for the type attribute of button elements is "submit"),则单击时的默认操作是提交该表单。为防止提交,请将按钮放在</form>外部。之所以可行,是因为该按钮没有引用任何要提交的表单。您可以改为添加一个侦听器并调用event.preventDefault()。之所以有效,是因为您告诉浏览器不要采取默认操作(提交表单)

  2. event.preventDefault()主要用于onsubmit元素。无论表单如何提交,它都会在表单提交之前立即触发。 <form>几乎可以从任何元素发出。单击元素时会发生这种情况。这可以在onclick<input>上。甚至整个<button>

  3. 请勿使用。

© www.soinside.com 2019 - 2024. All rights reserved.