preventDefault 和 type submit 如何处理表单?

How does preventDefault and type submit work with forms?

所以当我使用 JS 并尝试提交输入时,我尝试了一些事情,但有些奇怪的事情我不明白其中的逻辑。

  1. <form> 标签内部和外部 <input tpye="submit/> 有区别。如果它在表单标签内,我需要使用 preventDefault() 函数,但如果它在表单标签外,如果编写简单的 js 香草代码,我不需要这样做。 这是为什么?

  2. onsubmit 和 onclick 有什么区别?特别是在表单标签中。因为如果我使用 onsubmit,那么 js 代码将无法正常工作。

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

谢谢!

默认情况下,如果您在表单中输入 "submit" 类型,则单击该输入(或在表单中填写任何输入后按回车键)将发送 post 或获取向服务器请求,将当前页面重定向到服务器的响应。

这是在不使用 javascript 的情况下向服务器提交表单数据的原始方式。如果您想防止这种情况发生,您可以将提交输入替换为普通按钮 (<button onclick="doSomething()">Submit</button>),或者阻止默认提交事件:(form.onsubmit = event => event.preventDefault()).

onsubmitonclick 之间的区别在于 onsubmit 仅在表单发出提交事件时触发。要发出提交事件,表单需要单击 <input type="submit">,或者用户通过按回车键触发提交。

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

onclick 仅在单击元素时触发。因为 javascript 中的事件向上传播到父元素,所以这也会触发所有父元素上的任何 onclick 处理程序。

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

  1. 如果你有一个 type="submit" 输入(注意The default value for the type attribute of button elements is "submit") inside a form, the default action on click is to submit that form. To prevent it from submitting, place the button outside the </form>. This works because the button doesn't refer to any form to submit. You can instead, add a listener and call event.preventDefault()。这是有效的,因为你告诉浏览器不要接受默认操作(提交表单)

  2. onsubmit 主要用于 <form> 元素。无论提交方式如何,它都会在提交表单之前触发。 onclick 几乎可以从任何元素发出。当您单击一个元素时它会发生。这可能在 <input><button> 上。甚至整个 <form>

  3. 不要使用这个。