Я включаю навигацию с помощью клавиатуры для меню. Я столкнулся с проблемой в конкретной ситуации:
<ul>
<li><a href="" class="link1">link</a></li>
<li><a href="" class="link2">link</a></li>
<li><a href="" class="link3">link</a></li>
</ul>
JQuery:
$('ul').keypress(function (eh){
var keyPressed = eh.keyCode;
if (keyPressed=='37'){
$currentFocusedLink.closest('li').prev('li:first').find('a:first').focus()
};
Что происходит:
Я фиксирую клавиши со стрелками для перемещения между меню. Это работает ЗА ИСКЛЮЧЕНИЕМ, когда курсор находится перед первым символом одной ссылки, и я нажимаю стрелку назад.
Я думаю, что происходит то, что курсор перемещается, а затем фиксируется нажатие клавиши. Поскольку курсор перемещается в предыдущий тег привязки, он вызывает фокусировку. Но поскольку я также фиксирую нажатие клавиш и назначаю фокус, то независимо от того, какое событие фокусировки вызывается дважды,
Есть ли способ обойти эту проблему?
UPDATE:
Вот пример кода, чтобы попытаться получить хорошее представление о том, что происходит.
HTML:
<div class="testNav">
<a href="">TEST LINK 1</a>
<a href="">TEST LINK 2</a>
<a href="">TEST LINK 3</a>
<a href="">TEST LINK 4</a>
<a href="">TEST LINK 5</a>
</div>
Jquery:
var $ activeLink;
$('.testNav')
.find('a')
.focus(function(){
$activeLink = $(this);
})
.end()
.keypress(function (eh){
var keyPressed = eh.keyCode;
if (keyPressed=='37'){
$activeLink.prev('a').focus()
};
});
Обратите внимание, что вы можете просто переходить вперед и назад к каждой ссылке.
Теперь перейдите на 5-ю ссылку и нажмите стрелку назад. Он перейдет к ссылке 3. Нажмите еще раз, и она перейдет к ссылке 1.
Я думаю причина как указана выше ... мой скрипт применяет фокус, но так же поступает и перемещение курсора в предыдущий тег привязки. И то и другое происходит, когда вы нажимаете стрелку назад.