是否可以使用 JavaScript focus() 函数将注意力集中在 <div> 上?

IT技术 javascript focus
2021-01-17 14:17:43

是否可以专注于<div>使用 JavaScriptfocus()函数?

我有一个<div>标签

<div id="tries">You have 3 tries left</div>

我正在尝试<div>使用以下方法专注于上述内容

document.getElementById('tries').focus();

但它不起作用。有人可以提出建议吗....?

6个回答

是的 - 这是可能的。为了做到这一点,您需要分配一个tabindex ...

<div tabindex="0">Hello World</div>

tabindex 为 0 会将标签放置在“页面的自然 Tab 键顺序中”。更高的数字会给它一个特定的优先级顺序,其中 1 将是第一个,2 秒,依此类推。

您还可以将 tabindex 设置为 -1,这将使 div 只能由脚本而非用户获得焦点。

document.getElementById('test').onclick = function () {
    document.getElementById('scripted').focus();
};
div:focus {
    background-color: Aqua;
}
<div>Element X (not focusable)</div>
<div tabindex="0">Element Y (user or script focusable)</div>
<div tabindex="-1" id="scripted">Element Z (script-only focusable)</div>
<div id="test">Set Focus To Element Z</div>

显然,拥有一个可以通过脚本聚焦而其他输入法无法聚焦的元素是一种耻辱(特别是如果用户仅使用键盘或类似的限制)。还有一大堆标准元素在默认情况下可聚焦的,并且具有语义信息以帮助用户。明智地使用这些知识。

@Michael Shimmins,这允许使用focus().
2021-03-19 14:17:43
如果不清楚,添加tabindex到元素将使其成为可聚焦的,这将启用focus()blur()方法,然后您可以像这样触发焦点:document.getElementById('tries').focus();
2021-03-23 14:17:43
@Olical - 我很确定这正是它在可能回答的最后一行中所说的。如果您认为存在需要编辑的问题,请告诉我。
2021-03-31 14:17:43
嗨@SteveOwen - 它似乎仍然适用于 Firefox v42。我在此答案中添加了一个片段,以便您可以运行它并进行测试。
2021-04-07 14:17:43
@SteveOwen 使用window.location.hash = ...就是这样做的方法。焦点并不意味着“进入视野”,它只是意味着将焦点放在该元素上。
2021-04-10 14:17:43
window.location.hash = '#tries';

这将滚动到有问题的元素,本质上是“聚焦”它。

它在某些 Chrome 版本中不起作用......但是,@vinoths 解决方案做到了
2021-03-12 14:17:43
@CarlosVerdes; Angular 有解决方案吗?
2021-03-12 14:17:43
不回答“焦点”问题,这不应该是正确答案。就我而言,我想专注于“contentEditable”div,而您的技巧无济于事。
2021-03-21 14:17:43
这有效,但是......使用 Angular 你会遇到问题!!
2021-03-25 14:17:43
@Casey Chu:它在 ie 中工作正常,但在 Firefox 中却没有,你有什么想法吗?
2021-04-02 14:17:43

document.getElementById('tries').scrollIntoView()作品。这比window.location.hash 固定位置时效果更好

如果我在 Chrome 中执行此操作,它会不断滚动回仍然聚焦的输入字段。特别是如果页面还没有完成加载。
2021-03-11 14:17:43
@om-the-eternity 已经表示他希望 div 引起用户的注意,所以他需要的不是真正聚焦(即使在工作时这样做是不正确的)div,而是将它带到屏幕上,这解决了
2021-03-13 14:17:43
请注意,此解决方案不适用于 IE、Opera 或 Safari。
2021-04-06 14:17:43
我刚刚在 Chrome 65 中尝试过这个,但它不起作用。叠加 div 滚动到视图中,但焦点仍在背景 div 中。我所知道的唯一可靠的方法是tabindex在覆盖层 div 中有一个 tabbable 元素(使用属性)并focus()在该元素上使用
2021-04-06 14:17:43

您可以使用 tabindex

<div tabindex="-1"  id="tries"></div>

tabindex 值可以允许一些有趣的行为。

  • 如果给定值“-1”,则该元素不能被制表,但可以通过编程方式(使用 element.focus())将焦点赋予该元素。
  • 如果给定值为 0,则该元素可以通过键盘获得焦点并落入文档的 Tab 流中。大于 0 的值创建一个优先级,其中 1 是最重要的。
拯救生命。使用 chrome 和 firefox 工作正常
2021-03-15 14:17:43
哇,谢谢很酷的技巧。谢谢!否则我不会想到这一点。
2021-03-19 14:17:43
救命啊,谢谢 在 Edge 中,div 可以聚焦,但在 Chrome 中没有这个技巧就不能聚焦。接受的答案很好,但我不想在 url 中添加额外的部分。
2021-03-31 14:17:43
<div id="inner" tabindex="0">
    this div can now have focus and receive keyboard events
</div>
这对我在 Chromium/Chrome 46 中只与 $('#inner').focus();
2021-03-19 14:17:43