你如何清除javascript中的焦点?

Posted

技术标签:

【中文标题】你如何清除javascript中的焦点?【英文标题】:How do you clear the focus in javascript? 【发布时间】:2011-02-01 00:22:03 【问题描述】:

我知道这不应该那么难,但我在 Google 上找不到答案。

我想执行一段 javascript 来清除它所在的任何元素的焦点,而无需提前知道焦点在哪个元素上。它必须适用于 firefox 2 以及更现代的浏览器。

有什么好办法吗?

【问题讨论】:

清晰焦点是什么意思? - 和blur一样吗? 我想让浏览器中的任何元素都没有焦点。 【参考方案1】:

回答:document.activeElement

要做你想做的事,请使用document.activeElement.blur()

如果你需要支持 Firefox 2,你也可以使用这个:

function onElementFocused(e)

    if (e && e.target)
        document.activeElement = e.target == document ? null : e.target;
 

if (document.addEventListener) 
    document.addEventListener("focus", onElementFocused, true);

【讨论】:

如果浏览器份额为 0.66% 的 Firefox 2 是一个交易破坏者......我有一个修复程序,在我编辑的答案中。 2013年,Firefox 2的浏览器份额大幅低于0.66%,简单的document.activeElement.blur()是实现这一效果的最佳方式。 我得到以下信息:Property 'blur' does not exist on type 'Element'.ts(2339) @YTG 查看我发布的这个问题的答案,它解决了这个问题。 document.activeElement 是只读属性。你不能给它分配任何东西【参考方案2】:

.focus() 然后.blur() 在您的页面上出现其他任意内容。由于只有一个元素可以拥有焦点,因此将焦点转移到该元素,然后将其移除。

【讨论】:

有没有办法制作一个有焦点的不可见元素? 我不是最好的方法专家;但是您当然可以将其放置在屏幕外或overflow: clip 样式元素的范围之外。但是您可以只使用页面上已经存在的字段。或者仅为此目的创建一个并再次删除它。 我认为将焦点设置到屏幕外的元素会强制滚动到该元素。但是,您可以为此目的创建一个不可见的元素。话虽如此,某些浏览器可能很难删除插入符号。只是 blur() 可能会更好。您仍然可以使用 keyup (keydown) 事件处理程序获取键。 此答案已过时,不适用于 2017 年。请改用 activeElement,如 ***.com/a/2520670/39808 它仍然有效,只是更长并且移动焦点(这可能会干扰 TAB 导航)此外,“其他任意东西”应该是什么也不是很明显。【参考方案3】:

dummyElem.focus() 其中 dummyElem 是隐藏对象(例如具有负 zIndex)?

【讨论】:

【参考方案4】:

你可以调用window.focus();

但移动或失去焦点势必会干扰使用 Tab 键浏览页面的任何人。

您可以监听 keycode 13,如果按下 tab 键则放弃效果。

【讨论】:

【参考方案5】:
document.activeElement.blur();

在 IE9 上工作错误 - 如果活动元素是文档正文,它会模糊整个浏览器窗口。最好检查一下这种情况:

if (document.activeElement != document.body) document.activeElement.blur();

【讨论】:

我收到Property 'blur' does not exist on type 'Element'.ts(2339) 您需要转换为 htmlElement。【参考方案6】:

使用 jQuery 就可以了:$(this).blur();

【讨论】:

这是一个旧答案,所以您现在可能已经知道了,但是这个答案不适用有两个原因。 1. 假设 OP 使用的是 jquery,2. this 需要成为焦点元素,而问题明确指出 OP 不提前知道焦点元素。【参考方案7】:

在使用 TypeScript 时,此处提供的答案都不完全正确,因为您可能不知道所选元素的种类。

因此这是首选:

if (document.activeElement instanceof HTMLElement)
    document.activeElement.blur();

此外,我不鼓励使用已接受答案中提供的解决方案,因为由此产生的模糊不是官方规范的一部分,并且可能随时中断。

【讨论】:

使用较新的as 类型转换的类似解决方案:(document.activeElement as HTMLElement).blur()

以上是关于你如何清除javascript中的焦点?的主要内容,如果未能解决你的问题,请参考以下文章

CTreeCtrl:如何清除所选项目的焦点

JS表单代码获得焦点自动清除提示,失去焦点恢复默认提示

如何使用 JavaScript 将焦点设置在 HTML 表单中的元素上?

如何清除焦点上的文本区域?

javascript、getelementsbyname 和焦点

在焦点上清除输入框中的默认文本