这个问题有一个有用的答案,展示了如何使用 jQuery 在列表中上下导航,您可以在此处查看。代码是这样的:
var li = $('li');
var liSelected;
$(window).keydown(function(e){
if(e.which === 40){
if(liSelected){
liSelected.removeClass('selected');
next = liSelected.next();
if(next.length > 0){
liSelected = next.addClass('selected');
}else{
liSelected = li.eq(0).addClass('selected');
}
}else{
liSelected = li.eq(0).addClass('selected');
}
}else if(e.which === 38){
if(liSelected){
liSelected.removeClass('selected');
next = liSelected.prev();
if(next.length > 0){
liSelected = next.addClass('selected');
}else{
liSelected = li.last().addClass('selected');
}
}else{
liSelected = li.last().addClass('selected');
}
}
});
我想实现类似的东西,但稍微复杂一些。我的页面上将有多个列表,而不是一个列表。我已经对它们进行了设置,以便它们可以被标记。一旦该列表获得焦点,我希望向上/向下箭头键在列表中移动。
我也想了解为什么上面的代码添加/删除类而不是使用实际赋予元素焦点element.focus();
我的 HTML 标记:
<ul tabindex="0" id="client-list" class="tabbable">
<li tabindex="-1">Client 1</li>
<li tabindex="-1">Client 2</li>
</ul>
<ul tabindex="0" id="product-list" class="tabbable">
<li tabindex="-1">Product 1</li>
<li tabindex="-1">Product 2</li>
</ul>
我尝试修改keydown
函数以测试当前处于活动状态的元素:
if ( tabList.hasFocus ) {...
但无济于事。我想这是一个非首发,因为该元素不会有焦点,但子li
项会有。