你如何让$(this)
选择器专注于当前元素?在这个 jsfiddle 中,我已经将它安装在一个指定的元素中,所以你不能按 enter 来激活你“所在”的按钮。http://jsfiddle.net/mathzarro/gd6Ep/1/
这是棘手的部分:$("button:first").trigger('focus');
附言。我已经说过我作为一种表情安装了!最初的编码员是伊恩,这是链接..谢谢@Ian! http://jsfiddle.net/Vtn5Y/
你如何让$(this)
选择器专注于当前元素?在这个 jsfiddle 中,我已经将它安装在一个指定的元素中,所以你不能按 enter 来激活你“所在”的按钮。http://jsfiddle.net/mathzarro/gd6Ep/1/
这是棘手的部分:$("button:first").trigger('focus');
附言。我已经说过我作为一种表情安装了!最初的编码员是伊恩,这是链接..谢谢@Ian! http://jsfiddle.net/Vtn5Y/
HazMat 提到了真正的问题,你关注的是错误的元素(总是第一个按钮使用$("button:first").trigger('focus');
.
liSelected.trigger('focus');
在 keydown 处理程序结束时调用并删除其他调用$("button:first").trigger('focus');
将解决问题。
你还有另一个问题
$("button:eq(1)").click(function () {
// Why are you calling this? Remove this line
$("button:eq(0)").trigger('click');
update($("span:last"));
});
此外,jsfiddle 很棒,但您也应该在此处发布与代码相关的代码。
您发布的代码存在脆弱的查询,内部耦合,也就是说,更改 HTML 结构不是很灵活。我已经重新编写了您的代码,使其处于更好的状态。以下是主要功能
这是代码
var buttons = $('button');
var spans = $('span');
// Update the span when button is clicked
buttons.click(function(e){
var span = $(spans[Array.prototype.indexOf.call(buttons, document.activeElement)]);
span.text(parseInt(span.text(), 10) + 1);
});
// Handle the navigation, set focus on the next element
$(window).keydown(function(e){
var isLeft = e.which === 38 || e.which === 37,
isRight = e.which === 40 || e.which === 39;
if(isLeft || isRight){
var currentButtonIndex = Array.prototype.indexOf.call(buttons, document.activeElement);
var nextButtonIndex;
if (currentButtonIndex === -1) {
nextButtonIndex = 0;
} else {
var toAdd = isLeft ? -1 : 1;
nextButtonIndex = (currentButtonIndex + toAdd + buttons.length) % buttons.length;
}
buttons[nextButtonIndex].focus();
}
});