使用JavaScript的focus()
函数来将焦点聚焦在<div>
标签上,是否可行?
我有一个<div>
标签。
<div id="tries">You have 3 tries left</div>
我试图使用以下代码集中在上述上:
document.getElementById('tries').focus();
但是它不起作用。有人能建议一些东西吗?
使用JavaScript的focus()
函数来将焦点聚焦在<div>
标签上,是否可行?
我有一个<div>
标签。
<div id="tries">You have 3 tries left</div>
我试图使用以下代码集中在上述document.getElementById('tries').focus();
但是它不起作用。有人能建议一些东西吗?
是的 - 这是可能的。为了做到这一点,您需要为文本框分配一个tabindex...
<div tabindex="0">Hello World</div>
一个tabindex值为0的标签会被放在“页面自然的Tab顺序”中。一个更高的数字将赋予它特定的优先级顺序,其中1是第一位,2是第二位,以此类推。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>
很明显,如果有一个可以通过脚本聚焦但无法通过其他输入方式聚焦的元素,这是很遗憾的事情(特别是对于只能使用键盘或具有类似约束的用户)。还有一堆标准元素默认情况下就可以被聚焦,并包含语义信息以帮助用户。请明智地利用这些知识。focus()
方法(以非标准的方式!)获得焦点。 - stragertabindex
属性可以使其可聚焦,这样就能使用 focus()
和 blur()
方法,然后你可以像这样触发聚焦:document.getElementById('tries').focus();
- pilauwindow.location.hash = ...
就是实现这个功能的方式。"focus" 并不意味着 "将元素带入视野",它只是简单地将焦点放在该元素上。 - Fentonwindow.location.hash = '#tries';
这将滚动到相关元素, 本质上是 "聚焦" 它。
document.getElementById('tries').scrollIntoView()
能够正常工作。 当你的页面使用固定定位时,这比window.location.hash
更好用。
<div tabindex="-1" id="tries"></div>
tabindex 属性的值可以导致某些有趣的行为。
<div id="inner" tabindex="0">
this div can now have focus and receive keyboard events
</div>
$('#inner').focus();
使用。 - TNTdocument.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 Shimmin的东西,但是不要像元素或应用于其上的CSS那样硬编码。
我仅使用jQuery进行add/remove class操作,如果您不想使用jQuery,则只需要替换add/removeClass操作即可。
--Javascript
function highlight(el, durationMs) {
el = $(el);
el.addClass('highlighted');
setTimeout(function() {
el.removeClass('highlighted')
}, durationMs || 1000);
}
highlight(document.getElementById('tries'));
--CSS
#tries {
border: 1px solid gray;
}
#tries.highlighted {
border: 3px solid red;
}
要使边框闪烁,您可以这样做:
function focusTries() {
document.getElementById('tries').style.border = 'solid 1px #ff0000;'
setTimeout ( clearBorder(), 1000 );
}
function clearBorder() {
document.getElementById('tries').style.border = '';
}
这将使边框变为红色,持续1秒钟,然后再次移除。
div
溢出并显示滚动条,则可以接受输入。当聚焦于带有滚动条的div
时,箭头键将滚动其内容(而不是其他元素(如body
)的内容)。 - Rory O'Kane