javascript中dom元素获取与释放焦点核心靠focus()和blur()方法,配合事件监听和tabindex属性实现精细控制:focus()用于主动设置焦点,需确保元素可聚焦;blur()用于主动移除焦点;通过focus/blur事件监听用户行为,document.activeelement和document.hasfocus()辅助判断焦点状态。

JavaScript 中 DOM 元素获取与释放焦点,核心靠 focus() 和 blur() 方法,配合事件监听和 tabindex 属性可实现精细控制。
获取焦点:focus() 方法
调用元素的 focus() 方法,即可将键盘输入焦点主动设置到该元素上。常见于表单自动聚焦、错误校验后跳转等场景。
- 必须确保元素是可聚焦的:默认支持
<input>、<textarea></textarea>、<button></button>、<select></select>等表单控件 - 非表单元素(如
<div>、<code><p></p>)需先设置tabIndex属性(如elem.tabIndex = -1或0),再调用focus() - 建议在元素已渲染且可交互后再调用(如放在
DOMContentLoaded或setTimeout(() => ..., 0)中) - 调用后,焦点会转移到父级可聚焦容器(如
),或按浏览器默认逻辑转移 - 注意:它不会触发
blur事件本身(事件由焦点离开自然触发),但可配合focusout监听全局失焦行为 - 若想“锁住”焦点不让离开某输入框(如验证失败时),可在
blur事件中立即调回focus(),但需谨慎避免阻塞用户操作 -
focus和blur不冒泡;如需委托,改用focusin和focusout(支持冒泡) - 推荐使用
addEventListener绑定,避免覆盖已有事件处理函数 - 示例:
input.addEventListener('focus', () => console.log('获得焦点')) -
document.activeElement:返回当前获得焦点的 DOM 元素(初始为) -
document.hasFocus():返回布尔值,表示整个页面是否处于聚焦状态(即浏览器窗口被激活) - 结合使用可做焦点存在性判断,例如:防止重复聚焦或仅在页面可见时执行操作
释放焦点:blur() 方法
blur() 用于主动移除当前元素的焦点,常用于阻止用户继续编辑或强制提交前校验。
监听焦点变化:focus / blur 事件
通过监听 focus 和 blur 事件,可响应用户手动聚焦/失焦行为(如 Tab 切换、鼠标点击)。
辅助属性与状态检查
判断和管理焦点状态离不开两个关键属性:











