2010-03-26 109 views
96

我知道这不应该那么难,但我在Google上找不到答案。如何清除javascript中的焦点?

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

有没有很好的方法来做到这一点?

+0

明确焦点是什么意思? - 它与模糊相同吗? – plodder 2010-03-26 01:36:23

+3

我想让它在浏览器中没有元素有焦点。 – Andres 2010-03-26 01:42:16

回答

74

.focus()然后.blur()其他东西在你的页面上是任意的。由于只有一个元素可以获得焦点,因此将其转移到该元素,然后移除。

+0

有没有办法让一个不可见的元素具有焦点? – Andres 2010-03-26 01:45:06

+1

我不是那种最好的方法的专家;但你一定可以将它定位在屏幕外或者位于“overflow:clip”风格元素的范围之外。但是您可以使用页面上已存在的字段。或者只是为了这个目的创建一个并再次删除它。 – 2010-03-26 02:02:37

+0

我认为将焦点设置为屏幕外的元素会强制滚动到该元素。但是,您可以为此目的创建一个不可见的元素。这就是说,一些浏览器可能很难删除插入符号。只有blur()可能会更好。您仍然可以通过keyup(keydown)事件处理函数获取键。 – 2015-06-04 23:54:19

93

答:document.activeElement

---编辑----

技术上:document.activeElement.blur()

----编辑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

在Firefox 2.0中不起作用。 – Andres 2010-03-26 01:42:47

+6

如果火狐浏览器2拥有0.66%的浏览器份额,那么它是一个破坏者...我有一个修复程序,它在我编辑的答案中。 – jps 2010-03-26 02:06:39

+12

2013年,Firefox 2的浏览器份额远远低于0.66%,简单的'document.activeElement.blur()'是实现这一效果的最佳途径。 – chowey 2013-11-28 21:57:46

2

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

0

你可以调用window.focus();

但移动或失去焦点必然会干扰任何使用Tab键来避开页面的人。

您可以侦听键码13,并在按下Tab键时放弃效果。

30
document.activeElement.blur(); 

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

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