你如何清除javascript中的焦点?

And*_*res 142 javascript focus

我知道这不应该那么难,但我找不到谷歌的答案.

我想执行一段javascript,它可以清除焦点,无需提前知道焦点所在的元素.它必须适用于Firefox 2以及更现代的浏览器.

有没有办法做到这一点?

jps*_*jps 151

回答: 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);
Run Code Online (Sandbox Code Playgroud)

  • 在2013年,Firefox 2的浏览器份额大大低于0.66%,简单的`document.activeElement.blur()`是实现此效果的最佳方式. (19认同)
  • 如果拥有0.66%浏览器份额的Firefox 2是一个交易破坏者...我有一个修复,这是我编辑的答案. (8认同)
  • 我得到以下信息:“类型‘Element’.ts(2339) 上不存在属性‘blur’” (2认同)

Kev*_*eid 86

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

  • 此答案已过期,2017年不适用.请改用activeElement,如/sf/answers/176446931/ (4认同)

小智 46

document.activeElement.blur();
Run Code Online (Sandbox Code Playgroud)

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

if (document.activeElement != document.body) document.activeElement.blur();
Run Code Online (Sandbox Code Playgroud)

  • 我得到“类型‘Element’.ts(2339) 上不存在属性‘模糊’” (3认同)
  • 您需要将其转换为 HTMLElement。 (3认同)

m_j*_*khi 9

对于使用打字稿的任何人,请使用

(document.activeElement as HTMLElement).blur();
Run Code Online (Sandbox Code Playgroud)

这确保元素的类型为HTMLElement

  • 这不能确保该元素是 HTMLElement。它只是满足类型检查器的要求。将其包装在“if(document.activeElement instanceof HTMLElement)”中以避免在非 HTML DOM 节点上崩溃。 (3认同)

wil*_*wer 8

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

因此,这将是首选:

if (document.activeElement instanceof HTMLElement)
    document.activeElement.blur();
Run Code Online (Sandbox Code Playgroud)

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

  • `as` 不确保该元素是 HTMLElement。它只是满足类型检查器的要求。如果没有定义“blur”,它将崩溃。 (2认同)