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

我想执行一段javascript,将从任何元素上清除焦点,而不知道提前哪个元素的焦点。它必须在firefox 2和更现代的浏览器上运行。

有什么好办法吗?


当前回答

对于任何使用typescript的人,使用

(document.activeElement as HTMLElement).blur();

这确保元素的类型为HTMLElement

其他回答

document.activeElement.blur();

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

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

你可以调用window.focus();

但是移动或失去焦点必然会干扰使用TAB键浏览页面的人。

您可以监听键码13,并忽略按下TAB键时的效果。

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

因此,最好这样做:

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

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

我更喜欢document.activeElement?document.activeElement.blur()。

我正在使用vue & react:在我的情况下,我可以在组件之间的任何地方调用它,它将删除焦点。

使用jQuery,它只是:$(this).blur();