因此,当我使用JS并尝试提交输入时,我尝试了几件事,有些奇怪的事情我不理解逻辑。
<input tpye="submit/>
标签的内部和外部的<form>
之间存在差异。如果它在表单标签内,则需要使用preventDefault()
函数,但是如果它在表单标签外,则无需编写简单的JS vanilla代码。为什么会这样?
onsubmit和onclick有什么区别?特别是在表单标签中因为如果我使用onsubmit,那么js代码实际上是行不通的。
如果我使用preventDefault(event)
,它将阻止将表单发送到服务器,而是仅使用浏览器进行计算?
谢谢!
默认情况下,如果您在表单中输入的类型为“提交”,则单击该输入(或在填写表单中的任何输入后单击回车键,都会向服务器发送帖子或获取请求,从而重定向当前页面服务器的响应。
这是不使用JavaScript即可将表单数据提交到服务器的原始方法。如果要防止这种情况发生,可以用一个普通按钮(<button onclick="doSomething()">Submit</button>
)替换提交输入,也可以防止默认的提交事件:(form.onsubmit = event => event.preventDefault()
)。
onsubmit
和onclick
之间的区别在于,onsubmit
仅在从表单发出提交事件时才触发。要发出一个提交事件,该表单需要单击<input type="submit">
,或者供用户通过按Enter来触发提交。
防止这种默认行为的另一种方法是在提交处理程序中将其设置为return false
。
onclick
仅在单击元素时被触发。由于javascript中的事件会传播到父级,因此这也会触发所有父级元素上的所有onclick
处理程序。
如果要完全忽略默认的表单提交行为,则可以定义一个带有onclick处理程序的按钮来处理您的自定义提交逻辑。
如果您在表单中有type="submit"
输入(Note,The default value for the type attribute of button elements is "submit"),则单击时的默认操作是提交该表单。为防止提交,请将按钮放在</form>
外部。之所以可行,是因为该按钮没有引用任何要提交的表单。您可以改为添加一个侦听器并调用event.preventDefault()
。之所以有效,是因为您告诉浏览器不要采取默认操作(提交表单)
event.preventDefault()
主要用于onsubmit
元素。无论表单如何提交,它都会在表单提交之前立即触发。 <form>
几乎可以从任何元素发出。单击元素时会发生这种情况。这可以在onclick
,<input>
上。甚至整个<button>
请勿使用。