enterkeyhint是语义提示属性,需配合type使用才有效:搜索用type="search"+enterkeyhint="search";消息输入用type="text"+enterkeyhint="send";跳转/完成/下一步分别选go/done/next;仅支持input和textarea,动态设置或框架绑定易失效。

在 H5 移动端,enterkeyhint 是一个语义提示属性,不能强制改变键盘行为,但合理搭配 type 和使用场景,能显著提升软键盘右下角按钮的文案准确性和用户直觉。关键不是“设了就变”,而是“设对才有效”。
搜索类输入框:用 type="search" + enterkeyhint="search"
这是兼容性最好、生效最稳定的组合。iOS Safari 和 Chrome 都会优先显示放大镜图标 + “搜索”文字,并默认关联表单提交语义。
- 写法:
<input type="search" enterkeyhint="search" placeholder="搜索商品"> - 不要写
type="text" enterkeyhint="search"—— 多数 Android 键盘会忽略,只显示“回车” - 配合
<form onsubmit="doSearch()"></form>,点击“搜索”键可自然触发表单提交(仍需e.preventDefault()控制逻辑)
聊天/消息输入框:优先用 input 单行 + enterkeyhint="send"
textarea 在多数环境下对 enterkeyhint="send" 响应极弱(iOS 常退化为换行,微信 X5 内核常静默忽略),而 input type="text" 更可靠。
- 写法:
<input type="text" enterkeyhint="send" placeholder="输入消息"> - 视觉上需要多行?用 CSS 模拟:
white-space: pre-wrap; overflow-y: auto; max-height: 120px; - 必须监听
keydown:检测e.key === 'Enter'且!e.shiftKey,调用e.preventDefault()后手动发送
跳转或确认类操作:按意图选 go、done 或 next
这些值效果依赖系统实现,建议结合具体交互目标选择:
-
go:适用于 URL 输入、页面跳转等场景,如<input type="url" enterkeyhint="go">,iOS 显示“前往”,Android 多显示“Go” -
done:适合单字段编辑完成即收起键盘,如资料填写页的手机号输入:<input type="tel" enterkeyhint="done"> -
next:表单中字段顺序明确时可用,但需确保 DOM 顺序合理或用tabindex控制焦点流转;previous支持度差,基本不推荐
避坑要点:这些操作会让 enterkeyhint 失效
很多“加了没反应”问题其实和属性本身无关,而是基础配置错误:
- 给
<button></button>、<div contenteditable> 或 <code>type="button"的 input 加该属性——完全无效,只支持<input>(含 search/url/tel/email/password)和<textarea></textarea> - 在 React/Vue 中用
:enterkeyhint绑定——框架不会透传到真实 DOM,需用ref+setAttribute('enterkeyhint', 'send')初始化设置 - 动态 JS 修改
element.enterKeyHint = 'send'——Safari 不支持,Chrome 虽支持但首次渲染后修改常不触发键盘重绘 - 未监听 Enter 事件就指望它自动触发逻辑——它不发事件、不调函数、不提交表单,纯 UI 提示











