如何确定哪个html页面元素有焦点? [复制]

Posted

技术标签:

【中文标题】如何确定哪个html页面元素有焦点? [复制]【英文标题】:How to determine which html page element has focus? [duplicate] 【发布时间】:2010-10-03 18:44:47 【问题描述】:

可能重复:How do I find out which DOM element has the focus?

javascript中有没有办法确定哪个html页面元素有焦点?

【问题讨论】:

***.com/questions/2683742/… 似乎是一个相关的问题。 【参考方案1】:

使用document.activeElement 属性。

Chrome 2+、Firefox 3+、IE4+、Opera 9.6+ 和 Safari 4+ 支持 document.activeElement 属性。

请注意,此属性将仅包含接受击键的元素(例如表单元素)。

【讨论】:

自 Safari 4 昨天发布以来。所有主要浏览器的最新版本现在都支持 document.activeElement 属性。不过,您仍然应该为旧版浏览器使用 event-hack(请参阅 Paolo 的回答): if(!document.activeElement) /* 添加事件侦听器以为旧版浏览器设置 document.activeElement */ MDN says document.activeElement 甚至在 IE4 中都支持,更不用说 Chrome 2+ 和 Firefox 3+。有机会更新这个答案吗? Chrome 现在支持这个 感谢您的建议!更新了答案。【参考方案2】:

查看this blog post。它提供了一种解决方法,使document.activeElement 可以在所有浏览器中运行。

function _dom_trackActiveElement(evt) 
    if (evt && evt.target)  
        document.activeElement = evt.target == document ? null : evt.target;
    


function _dom_trackActiveElementLost(evt)  
    document.activeElement = null;


if (!document.activeElement) 
    document.addEventListener("focus",_dom_trackActiveElement,true);
    document.addEventListener("blur",_dom_trackActiveElementLost,true);

注意事项:

这个实现有点过于悲观了;如果浏览器窗口失去焦点,则 activeElement 设置为 null(因为输入控件也失去焦点)。如果您的应用程序需要 activeElement 值,即使浏览器窗口没有焦点,您可以移除 blur 事件侦听器。

【讨论】:

很棒的东西。它对我有用。【参考方案3】:

只是为了记录,有点晚了,当然not supported in old browsers:

var element = document.querySelector(":focus");

应该适用于所有元素(例如锚点)。

【讨论】:

【参考方案4】:

也许document.activeElement,不知道浏览器是否支持。似乎可以在 Firefox 和 IE7 中使用,但我想您也必须在 Opera 等中尝试。

【讨论】:

【参考方案5】:

检查bottom post。我认为这会奏效......

【讨论】:

以上是关于如何确定哪个html页面元素有焦点? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 HTML 元素何时在 Android WebView 中获得焦点?

焦点后如何刷新页面?

如何将焦点设置到独立于 id 的 HTML 表单中的第一个输入元素?

JS中如何判断一元素是不是获得焦点?

jQuery:是焦点元素吗? [复制]

如何将焦点设置在页面顶部[重复]