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

OM *_*ity 204 javascript focus

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

我有一个<div>标签

<div id="tries">You have 3 tries left</div>
Run Code Online (Sandbox Code Playgroud)

我试图专注于以上<div>使用:

document.getElementById('tries').focus();
Run Code Online (Sandbox Code Playgroud)

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

Fen*_*ton 413

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

<div tabindex="0">Hello World</div>
Run Code Online (Sandbox Code Playgroud)

tabindex为0将使标记"按页面的自然Tab键顺序".较高的数字将赋予其特定的优先顺序,其中1将是第一个,2秒,依此类推.

您还可以给出-1的tabindex,这将使div只能通过脚本而不是用户进行聚焦.

document.getElementById('test').onclick = function () {
    document.getElementById('scripted').focus();
};
Run Code Online (Sandbox Code Playgroud)
div:focus {
    background-color: Aqua;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

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

  • @SteveOwen使用`window.location.hash = ...`是这样做的方法.焦点并不意味着"进入视野",它只是意味着将重点放在那个元素上. (9认同)
  • @Michael Shimmins,这允许元素可聚焦(以非标准的方式!)与`focus()`. (5认同)
  • 嗨@SteveOwen - 它似乎仍然适用于Firefox v42.我在这个答案中添加了一个片段,以便您可以运行它并进行测试. (4认同)
  • @Olical - 我很确定这正是它在最后一行中的回答.如果您认为存在需要编辑的问题,请告诉我. (2认同)
  • 如果不清楚,将"tabindex"添加到元素将使其可聚焦,这将启用`focus()`和`blur()`方法,然后您可以触发这样的焦点:`document.getElementById( '试图')聚焦();` (2认同)
  • 但是当专注于 javascript 时,该元素似乎没有获得 `:focus` css 规则 - https://developer.mozilla.org/en-US/docs/Web/CSS/:focus (2认同)
  • 这是一个更好的答案.@community应该标记它. (2认同)

Cas*_*Chu 95

window.location.hash = '#tries';
Run Code Online (Sandbox Code Playgroud)

这将滚动到有问题的元素,基本上"聚焦"它.

  • @Casey Chu:它的工作正常,但不是在Firefox中,你有什么想法吗? (2认同)
  • 不回答“焦点”问题,这不应该是正确的答案。就我而言,我想专注于“ contentEditable” div,而您的窍门无济于事。 (2认同)

vin*_*ths 72

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

  • 请注意,此解决方案将无法在IE,Opera或Safari中使用。 (2认同)
  • 我刚刚在 Chrome 65 中尝试过,但不起作用。覆盖 div 滚动到视图中,但焦点仍位于背景 div 中。我所知道的唯一可靠的方法是在覆盖 div 中有一个可选项元素(使用“tabindex”属性),并在该元素上使用“focus()”。 (2认同)

Sar*_* Ak 30

您可以使用tabindex

<div tabindex="-1"  id="tries"></div>
Run Code Online (Sandbox Code Playgroud)

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

  • 如果给定值为"-1",则元素不能被选项卡,但可以通过编程方式将焦点赋予元素(使用element.focus()).
  • 如果给定值0,则元素可以通过键盘聚焦并落入文档的标签流中.大于0的值创建优先级,1是最重要的.

  • 哇,谢谢很酷的技巧。谢谢!否则我不会想到这一点。 (2认同)

aza*_*zad 13

<div id="inner" tabindex="0">
    this div can now have focus and receive keyboard events
</div>
Run Code Online (Sandbox Code Playgroud)


小智 5

document.getElementById('test').onclick = function () {
    document.getElementById('scripted').focus();
};
Run Code Online (Sandbox Code Playgroud)
div:focus {
    background-color: Aqua;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但最好也为您的代码示例添加一些解释。 (3认同)