【发布时间】:2019-04-15 14:44:48
【问题描述】:
当向前和向后点击标签时,我需要将焦点/标签保持在覆盖模式内并带有项目列表。
我正在处理这个答案:Keep tabbing within modal pane only
以下是我到目前为止的尝试:
$(function() {
$("#show-overlay").on("click", function(){
$("#overlay-navigation").toggle();
$(this).text(function(i, text){
return text === "Show Overlay" ? "Hide Overlay" : "Show Overlay";
})
});
$('#overlay-navigation ul li:last-child').on('keydown', function (e) {
if ($("this") && (e.which == 9)) {
e.preventDefault();
$('#overlay-navigation ul li:first-child').focus();
}
if ($("#overlay-navigation ul li:first-child:focus") && (e.shiftKey && e.keyCode == 9)) {
e.preventDefault();
$('#overlay-navigation ul li:first-child').focus();
}
});
});
#navigation li a {
color: #000;
text-decoration: none;
}
#overlay-navigation {
display: none;
position: absolute;
top: 0;
left: 0;
width: 100%;
background-color: #000;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="navigation">
<ul>
<li> <a href="">Item</a> </li>
<li> <a href="">Item</a> </li>
<li> <a href="">Item</a> </li>
<li> <a href="">Item</a> </li>
</ul>
</div>
<button id="show-overlay">Show Overlay</button>
<div id="overlay-navigation">
<ul>
<li> <a href="">Item</a> </li>
<li> <a href="">Item</a> </li>
<li> <a href="">Item</a> </li>
<li> <a href="">Item</a> </li>
</ul>
</div>
基本上,我在这里的思考过程与所附问题中最受好评的答案非常相似,当最后一个项目集中时,我可以将我的焦点保持在模态中回到第一个项目。但是,在该特定示例中,它不起作用。
我还需要能够向后切换(并检查如何查看是否按下了 shift 和 tab 键。我在这里的答案中学习了如何做到这一点:Is the shiftkey held down in JavaScript)以留在模态中,这与forwards基本相同,但向后如此:
if ($("#overlay-navigation ul li:first-child:focus") && (e.shiftKey && e.keyCode == 9)) {
e.preventDefault();
$('#overlay-navigation ul li:first-child').focus();
}
但是我发现它仍然向后逃避模态。
如何在覆盖模式内保持向前和向后的制表符?
【问题讨论】:
标签: javascript jquery html