【发布时间】:2013-11-09 01:47:29
【问题描述】:
This question 有一个有用的答案,展示了如何使用 jQuery 上下导航列表,您可以看到 here。代码是这样的:
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 项目会。
【问题讨论】:
标签: javascript jquery