我有一系列按钮和其他控件。当用户按下Shift和*时,我想移动到下一个控件(按钮,文本或任何其他控件)。我怎样才能以最短的方式做到这一点。
答案 0 :(得分:0)
$("#theNextButton").focus();
并且做shift +另一个像这样做的键:
var isShiftDown = false;
$(document).keyup(function (e) {
if(e.which == 16){
isShiftDown = false;
}
}).keydown(function(event){
var code = event.keyCode;
if(code == 16){ //left
isShiftDown = true;
}
if(code == 37 && isShiftDown){ //left
//instead of traping left key, trap what you need
}
});
你必须想出一种方法来专注于“下一步”控制。它不应该太难。我现在要玩一些后果。
答案 1 :(得分:0)
这无疑是一种俗气的解决方案,但现在就是这样。
关于这是怎么做的一些解释。我喜欢这里的更正,所以请开火。
获取“nav”类的所有元素。这些是我们想要转移焦点的元素。
从此集合中,找到以前关注的元素及其索引。不幸的是,Internet Explorer和FireFox要么没有提供确定哪个元素集中的方法,要么不同。我在这里用自定义的“isFocused”属性作弊。
如果没有先前聚焦的元素,请将集合中的第一个元素设置为聚焦,并将isFocused属性添加到其中。
如果有先前聚焦的元素,请从中删除isFocused属性并在其后找到下一个“nav”元素。此代码支持从集合的开头重新开始,因此如果您使用此技术聚焦最后一个元素并按Shift +“*”,则第一个元素将被聚焦。
这种方法存在问题。这是狭隘的,它忽略了用户手动关注的元素。它还为HTML元素分配一个单击处理程序以捕获所有活动。这可能不是处理这种需求的最有效方式。
$(document).ready
(
function()
{
$("html").keydown
(
function(e)
{
if(e.shiftKey && e.keyCode == 42)
{
var wrappedElemSet = $(".nav");
var focusedElementIndex = -1;
var focusedElement;
var elems = wrappedElemSet
.each
(
function(i)
{
if($(this).attr("isFocused"))
{
focusedElementIndex = i;
focusedElement = $(this);
return false;
}
}
)
if(focusedElementIndex == -1)
{
$(wrappedElemSet[0])
.attr("isFocused", "isFocused")
.focus();
}
else
{
var elementIndexToFocus =
focusedElementIndex == wrappedElemSet.size() + 1 ?
0 : focusedElementIndex + 1;
focusedElement.removeAttr("isFocused");
$(wrappedElemSet[elementIndexToFocus])
.attr("isFocused", "isFocused")
.focus();
}
}
}
);
}
);