您如何清除javascript中的焦点?


159

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

我想执行一段JavaScript,将焦点从任何元素上清除,而无需提前知道焦点在哪个元素上。它必须在firefox 2以及更现代的浏览器上工作。

有什么好方法吗?


明确的焦点是什么意思?-和模糊一样吗?
压条

3
我要这样做,以使浏览器中的任何元素都没有焦点。
安德列斯(Andres)2010年

Answers:


170

回答: 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);

8
如果使用浏览器份额为0.66%的Firefox 2可以解决问题……我有一个解决方案,它已在我修改过的答案中。
jps

21
2013年,Firefox 2的浏览器份额大大低于0.66%,而简单document.activeElement.blur()是实现此效果的最佳方法。
chowey

88

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


有没有办法使一个具有焦点的不可见元素?
安德列斯(Andres)2010年

1
我不是最好的方法专家。但您当然可以将其放置在屏幕外或overflow: clip样式元素的范围之外。但是您可以只使用页面上已经存在的字段。或仅为此目的创建一个,然后再次将其删除。
凯文·里德

我认为将焦点设置到屏幕外的某个元素将强制滚动到该元素。但是,您可以为此目的创建一个不可见的元素。话虽如此,某些浏览器可能很难删除插入符号。只是blur()可能会更好。您仍然可以通过keyup(keydown)事件处理程序获取键。
Alexis Wilke 2015年

5
该答案已过期,不适用于2017年。请改用activeElement,如在stackoverflow.com/a/2520670/39808
Paul Fisher

它仍然可以工作,只是更长的时间,并且可以移动焦点(这可能会干扰TAB导航)。而且,“其他任意东西”应该是什么还不是很明显。
user202729 '18

49
document.activeElement.blur();

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

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

没错,但是今天几乎没有人使用IE9。
唐老鸭

18

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

因此,这将是首选:

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

此外,我不鼓励使用接受的答案中提供的解决方案,因为由此产生的模糊不属于正式规格的一部分,并且随时可能破裂。


6
很高兴看到我在2010年提出的问题继续得到不断发展的答案。
安德烈斯(Andres)

2

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


0

您可以调用window.focus();

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

您可以收听键控代码13,如果按下Tab键,则放弃效果。


-3

使用jQuery,它的公正性是: $(this).blur();


2
这是一个旧的答案,所以您现在可能已经知道,但是有两个原因导致该答案不适用。1.假设OP正在使用jquery,2. this需要成为焦点元素,而问题明确指出OP事先不知道焦点元素。
布兰登
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.