在JavaScript中更改document.activeElement是否可能?

87

在JavaScript中,是否有可能以编程方式更改document.activeElement属性的值?

2个回答

117

在 IE 中,请使用要成为活动元素的元素的 setActive() 方法。在其他支持 activeElement 的浏览器中,只要该元素能够接收焦点(表单元素、可编辑元素、具有设置了 tabindex 的元素),就可以使用该元素的 focus() 方法。

如果要将 activeElement 设置回默认状态(大多数浏览器中的 <body> 元素),只需调用活动元素的 blur() 方法即可:

document.activeElement.blur();

让我们以jquery.com页面为例。当您进入页面并在FireBug中检查document.activeElement时,会得到“<body class =”jq-enhanced“>”。然后,假设您更改了activeElement以使用某个链接元素(<a>),那么如何将activeElement重置为之前的一个(body)呢?我无法使用document.body.focus();来完成这件事。 - mgamer
4
记得给div元素设置tabindex="-1"。 - g00fy
@g00fy:在什么情况下? - Tim Down
1
@TimDown 当你想关注“不可聚焦”的DOM节点,比如一个div时,如果在普通标签中设置tabindex="-1",就可以用.focus()进行聚焦。 - Darlan Alves

35
您可以使用 .focus() 方法聚焦到想要的元素,这样它就会成为新的 document.activeElement

33
如果定义了element.tabindex,element.focus仅在Chrome 55中有效。默认情况下,div没有tabindex,因此默认情况下div.focus()无效。在调用focus之前的任何时候,只需将element.tabindex设置为某个值,例如“-1”。然后调用element.focus。现在你会看到element === document.activeElement,这意味着滚动键(如向上/向下)将应用于当前活动的元素。有些混乱! - Josh
1
看起来应该是 tabIndex - writofmandamus
我的activeElement是一个iframe,但在Chrome 84上无效。不过,.blur()可以解决这个问题。 - user3064538

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接