Я действительно не знаю, для чего вы работали с 'focus_li', но я придумал другое решение.
Это перебирает ваш список, чтобы проверить, на каком элементе сосредоточено внимание, и фокусируется наследующий элемент соответственно
Новый код JS:
$(document).keyup(function(e) {
if (e.which === 40) {
focus = false
links = $('a') //feel free to add more links it'll still work
for (var i = 0; i < links.length; i++) {
if (links[i] === (document.activeElement)) {
focus = true;
if (links[i+1] === undefined) {
console.log("last element") //reached last link
} else {
links[i+1].focus(); //focuses next link if available
}
break;
}
}
if (!focus) {
links[0].focus() //if none of the links is focused, the first one gets focused
}
} else if (e.which === 38) {
//adapt the above code to links[i-1]
} else {
}
});
вот JSfiddle:
https://jsfiddle.net/90jso3cq/
чтобы ответить на часть вашего вопроса о вводе по ссылке, которая происходит автоматически, если у вас есть действительная ссылка
РЕДАКТИРОВАТЬ
Код получает все элементыклассы 'links' и иногда они не в порядке
здесь есть новый HTML
<ul>
<li><a id="link_1"class="link" href="#">First Link</a></li>
<li><a id="link_2"class="link" href="#">Second Link</a></li>
<li><a id="link_3"class="link" href="#">Third Link</a></li>
<ul>
и новый JS
if (e.which === 40) {
focus = false
links = $('.link') //feel free to add more links itll still work
for (var i = 0; i < links.length; i++) {
if (links[i] === (document.activeElement)) {
focus = true;
if (links[i+1] === undefined) {
console.log("last element") //reached last link
} else {
console.log(document.getElementById("link_" + (i + 2)))
document.getElementById("link_" + (i + 2)).focus(); //focuses next link if available
}
break;
}
}
if (!focus) {
document.getElementById("link_1").focus() //if none of the links is focused, the first one gets focused
}
} else if (e.which === 38) {
//adapt the above code to links[i-1]
} else {
}
});
и последняя, но не менее важная новая скрипка
https://jsfiddle.net/8pdtsxjv/