This question имеет полезный ответ, показывающий, как использовать jQuery для перемещения вверх и вниз по списку, который вы можете увидеть here. Код:Перемещение по нескольким спискам с помощью клавиш со стрелками/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
предметов.
Это замечательно, спасибо. Есть ли у вас какие-либо идеи, как исправить поведение, когда в списке много элементов, и, следовательно, прокручивается? Надеюсь, что, перейдя в финальную видимую «ли», движение вниз будет прокручивать список. На самом деле это не то, что происходит. Я отклонил ваш пример [здесь] (http://jsfiddle.net/cherryflavourpez/5wBNS/). – CherryFlavourPez