javascript - 有没有办法从 querySelectorAll() 中聚焦元素?
问题描述
我想从键盘(向上和向下键)集中我的下拉元素。
我的代码:
var matches = document.querySelectorAll("div.dropdown-content > a");
var i = 0;
var focused = matches[i];
document.onkeydown = function(e) {
switch (e.keyCode) {
case 37:
i++;
focused.focus();
break;
case 38:
i--;
focused.focus();
break;
}
};
但它实际上不起作用。控制台不报告任何错误。
解决方案
你一直关注同一个元素,变化focused
时不会更新i
。
此外,向下箭头的键码是40
,而不是37
。
最后,您应该检查i
始终在0
和之间matches.length - 1
。
var matches = document.querySelectorAll("div.dropdown-content > a");
var i = 0;
document.onkeydown = function(e) {
switch (e.keyCode) {
case 40:
if(i < matches.length - 1) i++;
matches[i].focus();
break;
case 38:
if(i > 0) i--;
matches[i].focus();
break;
}
};
当您到达最后一项时,您还可以关注第一项,反之亦然:
document.onkeydown = function(e) {
switch (e.keyCode) {
case 40:
i = (i + 1) % matches.length;
matches[i].focus();
break;
case 38:
i = Math.abs(i - 1 + matches.length) % matches.length;
matches[i].focus();
break;
}
};
推荐阅读
- javascript - 如何使当我单击列表项时列表移动以使该项目位于中心?
- php - 重定向错误(certbot 续订/nginx 后)
- python - 如何索引和绘制两个图表
- java - 如何使用百里香叶获取实体集合的平均整数?
- javascript - 无头 wordpress + nextjs,我发布的每篇文章都变成 Autodraft
- python - Handling duplicate xml tags while converting nested xml tags to list of dictionaries using recursive function in Python
- perl - 嵌入仅 Perl 的模块和嵌入的 Perl 解释器
- excel - 具有多个公共常量变量增量的组合框 additem
- c - popen for netstat 在 C 中无法正常工作
- r - “光栅”包 getData 功能不起作用