enterkeyhint是html input/textarea的原生属性,用于向移动端虚拟键盘建议回车键文案(如search、send),仅影响ui不改变行为;目前chrome 87+、edge 87+、safari 16.4+部分支持,firefox完全不支持,且需配合type等语义属性才更可能生效。

enterkeyhint 是什么,它能起作用吗
它不是万能的,也不是所有浏览器都支持——目前只有 Chrome 87+、Edge 87+ 和 Safari 16.4+(仅部分场景)真正解析 enterkeyhint,且只对 <input> 和 <textarea></textarea> 生效。更关键的是:它不改变表单提交行为,只影响虚拟键盘右下角按钮的文案和语义(比如从“搜索”变成“发送”),是否触发提交仍由 type、formmethod 或 JS 决定。
哪些值可用,对应什么实际效果
可选值是有限的几个枚举:enter、done、go、next、previous、search、send。不同系统/键盘会映射为不同文案,例如:
-
search在多数 Android 键盘上显示为“搜索”,在 iOS 上可能显示为“搜索”或“前往” -
send在微信内置浏览器中常显示为“发送”,但在某些旧版 Samsung 键盘上可能回退为“回车” -
next和previous通常用于表单多字段顺序切换,但需配合tabindex或 JS 手动聚焦,否则仅改文案无跳转逻辑
为什么加了 enterkeyhint 却没变化
常见原因有三个:
- 元素不是可编辑的:给
<div contenteditable="false"> 加 <code>enterkeyhint没用,必须是input或textarea,且不能是type="button"或disabled - 浏览器不支持或降级处理:Safari 对
enterkeyhint的支持较保守,比如在type="email"上可能忽略该属性,优先使用 type 自带的语义 - 与
type冲突:例如<input type="search" enterkeyhint="send">,Chrome 可能仍显示“搜索”,因为type="search"的优先级高于enterkeyhint
搭配 form 行为和 JS 的实用写法
想让“发送”键真正触发表单提交,不能只靠 enterkeyhint。典型组合如下:
或者监听 keydown 显式捕获 Enter:
input.addEventListener('keydown', e => {
if (e.key === 'Enter' && e.code === 'Enter') {
handleSubmit();
e.preventDefault(); // 防止默认换行或提交
}
});
注意:iOS Safari 在 textarea 中按“发送”键默认插入换行,除非你 e.preventDefault() 并手动控制;而 Android 键盘的“发送”通常不触发 submit,得靠 JS 补齐。
最易被忽略的一点:enterkeyhint 不是视觉属性,它不提供任何 CSS 控制权,也不能通过 JS 读取当前键盘显示的文案——你只能设置,无法检测是否生效。











