gpt4 book ai didi

javascript - .focus() on keydown() 只运行一次

转载 作者:行者123 更新时间:2023-11-30 14:44:48 24 4
gpt4 key购买 nike

我需要能够选择 <a>使用箭头键标记,然后使用回车键访问链接。我的实现非常接近,但经过一些调试后我似乎无法理解出了什么问题。相关代码如下:

var resultId = 0;
$("#search-input").keydown(function(e) {
var resultIdSelection = "#result-" + resultId;
var key = e.which;
if (key == "38") {
if (resultId > 1) {
e.preventDefault();
console.log(resultIdSelection)
resultId--;
$(resultIdSelection + " .item-link").focus();
}
}
if (key == "40") {
if (resultId < 5) {
e.preventDefault();
console.log(resultIdSelection)
resultId++;
$(resultIdSelection + " .item-link").focus();
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input id="search-input">
<ul>
<li id="result-0"><a class="item-link" href="#">Item</li>
<li id="result-1"><a class="item-link" href="#">Item</li>
<li id="result-2"><a class="item-link" href="#">Item</li>
<li id="result-3"><a class="item-link" href="#">Item</li>
<li id="result-4"><a class="item-link" href="#">Item</li>
<li id="result-5"><a class="item-link" href="#">Item</li>
</ul>

所以预期的行为是,当我按下向下键时,它会将焦点向下移动一个元素,如果按下向上键,它就会向上移动。它也不应超过列表项的最大数量,即 6。

然而,在每次按下箭头键时,它只会聚焦一次。我需要点击输入,然后再次按下向下键以转到下一个项目。

我不是 100% 确定,但我认为我需要以某种方式弄清楚如何“重置”每个向下箭头键的焦点。我还认为这可能与 e.preventDefault() 的方式有关。正在这里处理,但我的 keyCode 条件中有它。

根据提供的代码,我怎样才能最好地获得 .focus()事件触发多次?

最佳答案

问题是您的 keydown 监听器仅在焦点位于您的输入元素上时触发。因此,一旦用户按下向上或向下箭头一次,焦点就会从输入元素上移开,并且监听器将不再触发。

将监听器添加到整个文档(或添加到容器元素,或添加到每个 anchor 标记)将解决该问题。请参阅下面的工作解决方案。

更新:修复了代码以正确地将焦点应用到向上和向下箭头按下并在正确的时间更改目标 ID。

var resultId = 0;
$(document).keydown(function(e) {
var resultIdSelection;
var key = e.which;
if (key == "38") {
if (resultId > 0) {
e.preventDefault();
resultId--;
resultIdSelection = "#result-" + resultId;
console.log(resultIdSelection)
$(resultIdSelection + " .item-link").focus();
}
}
if (key == "40") {
if (resultId < 5) {
e.preventDefault();
resultId++;
resultIdSelection = "#result-" + resultId;
console.log(resultIdSelection)
$(resultIdSelection + " .item-link").focus();
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input id="search-input">
<ul>
<li id="result-0"><a class="item-link" href="#">Item</li>
<li id="result-1"><a class="item-link" href="#">Item</li>
<li id="result-2"><a class="item-link" href="#">Item</li>
<li id="result-3"><a class="item-link" href="#">Item</li>
<li id="result-4"><a class="item-link" href="#">Item</li>
<li id="result-5"><a class="item-link" href="#">Item</li>
</ul>

关于javascript - .focus() on keydown() 只运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49118177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com