你如何清除javascript中的焦点?

IT技术 javascript focus
2021-03-09 06:34:05

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

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

有没有好的方法可以做到这一点?

6个回答

回答: 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);
@YTG 看到我发布到这个问题的答案,它解决了这个问题。
2021-04-22 06:34:05
如果拥有 0.66% 浏览器份额的 Firefox 2 是一个交易破坏者......我有一个修复,这是在我编辑的答案中。
2021-04-25 06:34:05
我得到以下信息: Property 'blur' does not exist on type 'Element'.ts(2339)
2021-05-05 06:34:05
2013年,Firefox 2的浏览器份额大幅低于0.66%,而简单document.activeElement.blur()是实现这一效果的最佳方式。
2021-05-08 06:34:05
document.activeElement 是只读属性。你不能给它分配任何东西
2021-05-11 06:34:05

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

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

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

if (document.activeElement != document.body) document.activeElement.blur();
您需要转换为 HTMLElement。
2021-04-23 06:34:05
我得到 Property 'blur' does not exist on type 'Element'.ts(2339)
2021-05-07 06:34:05

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

因此,这将是首选:

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

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

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