在文本框中回车时页面自动提交的问题
之前遇到过 【ASP.NET】在弹出的 iframe 页面的文本框中按回车会刷新 iframe 页面~ 的问题,后来发现是因为 画面上只有一个文本框 导致的。
今天遇到的有些不同,画面上有多个文本框,但是仍然自动提交了。
在这篇博客:HTML 防止 input 回车提交表单 中列举了更多的可以导致上述现象(自动提交页面)的情况。
默认情况下,单个输入框,无论按钮的
type="submit"
还是type="button"
类型,回车即提交。这个类似于我之前遇到的情况,不过要补充一下,即使页面上没有按钮也会回车自动提交。
当
type="submit"
时,无论有几个type="text"
输入框,回车均表示提交。(<button>
按钮默认的 type 为 submit)这次遇到的就是由于这种情况导致的。页面有一个 button 但是没有设置 type 属性,也就是默认作为 submit 按钮,导致了这次的问题。
对策倒是很简单,将 type 显式指定为 button 就可以了。当
type="button"
时,且存在多个输入框,回车不提交。(button)
2025-09-10 追记
4.10.22.2 隐式提交(Implicit Submission)
一个<form>
元素(详见表单元素)的默认按钮,是指在树顺序中,第一个以该<form>
元素为表单所有者的提交按钮。
若用户代理(通常指浏览器)支持让用户隐式提交表单(例如,在某些平台上,当文本控件处于聚焦状态时,按下“回车”键即会隐式提交表单),则对于某一表单,若其默认按钮具备激活行为且未处于禁用状态,用户通过上述方式隐式提交表单时,用户代理必须在该默认按钮上触发一个click
事件。
网络上存在部分页面,其可用性完全依赖于隐式提交表单的功能,因此强烈建议用户代理支持此特性。
若表单不存在提交按钮,则隐式提交机制必须执行以下步骤:
在前文所述场景中,某元素若满足以下条件,则属于“阻止表单隐式提交的字段”:该元素是一个<input>
元素(详见输入元素),且其表单所有者为当前<form>
元素(详见表单元素),同时其type
属性处于以下任一状态:
- 文本状态(Text)(对应
type="text"
) - 搜索状态(Search)(对应
type="search"
) - 电话状态(Telephone)(对应
type="tel"
) - URL状态(URL)(对应
type="url"
) - 邮箱状态(Email)(对应
type="email"
) - 密码状态(Password)(对应
type="password"
) - 日期状态(Date)(对应
type="date"
) - 月份状态(Month)(对应
type="month"
) - 周状态(Week)(对应
type="week"
) - 时间状态(Time)(对应
type="time"
) - 本地日期时间状态(Local Date and Time)(对应
type="datetime-local"
) - 数字状态(Number)(对应
type="number"
)