JS 取消焦点:blur 方法、场景与常见坑

2026-11-12 0 3

取消焦点的核心方法

在浏览器中,焦点由当前活动元素(document.activeElement)持有。取消焦点最直接的方式是调用该元素的 blur() 方法:

document.activeElement.blur();

blur() 不接收参数,调用后元素失去焦点,触发 blur 事件,但不触发 focusout 的冒泡差异需要注意:blur 不冒泡,focusout 会冒泡。若要在父级统一监听失焦,应使用 focusout。

另一种写法是把焦点转走:

element.focus(); // 先设置 tabindex

element.blur();

对不可聚焦元素(如 div 未设置 tabindex)调用 blur() 没有实际效果,先确认元素本身可聚焦。

常见使用场景

输入完成后收起焦点

移动端表单中,用户点击“完成”或提交后主动失焦,可以收起软键盘:

input.addEventListener(‘keydown’, (e) => {

if (e.key === ‘Enter’) e.target.blur();

});

弹层关闭时归还焦点

关闭对话框后,让触发按钮重新获得焦点是合理的焦点管理;如果只是想清除输入框的高亮状态,则直接对输入框调用 blur()。

主动结束编辑态

表格单元格进入编辑态后,点击空白区域或按 Esc 取消编辑,此时调用 blur() 退出输入框,并同步更新数据状态。

与 focus 的配合

取消焦点通常和 focus 成对出现。常见模式是先判断当前焦点,再决定是否失焦:

if (document.activeElement === input) {

input.blur();

}

document.activeElement 在页面加载初期可能是 body,此时调用 blur() 无副作用,但不必依赖它做业务判断。

容易踩的坑

调用时机过早

在元素尚未渲染或已被移除时调用 blur() 无效。移除 DOM 前应先失焦,避免残留的焦点状态影响下一次渲染。

干扰用户操作

在 focus 事件里立刻调用 blur() 会造成焦点抖动,某些浏览器下还会阻断后续输入。需要延迟时用 setTimeout 或 requestAnimationFrame,不要写成同步递归。

忽略可访问性

对键盘用户而言,焦点是导航基础。无理由地清除焦点会让 Tab 键序列断裂。仅在明确结束某个交互(提交、关闭、取消编辑)时取消焦点,并把焦点交还给合理的元素。

移动端键盘不收起

部分场景下 blur() 后软键盘不立即收起,可配合 document.activeElement.blur() 或在触摸事件后执行,并避免在滚动过程中调用。

小结

blur() 是 JavaScript 取消焦点最轻量的手段,配合 focusout 监听和 document.activeElement 判断即可覆盖大多数表单与弹层场景。关键是明确“为什么失焦”,并在失焦后把焦点放到该去的地方。

看过这篇文章的人,推荐看以下内容

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

版权声明:所有的源码、软件和资料,不得使用于非法商业用途,不得违反国家法律,一切关于该资源商业行为与本站无关。

免费cms模板 建站百科 JS 取消焦点:blur 方法、场景与常见坑 https://www.mianfeicms.com/12480.html

我是签名

相关文章

猜你喜欢
发表评论
暂无评论