转到下一个按钮

时间:2009-09-16 03:07:20

标签: jquery

我有一系列按钮和其他控件。当用户按下Shift和*时,我想移动到下一个控件(按钮,文本或任何其他控件)。我怎样才能以最短的方式做到这一点。

2 个答案:

答案 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)

这无疑是一种俗气的解决方案,但现在就是这样。

关于这是怎么做的一些解释。我喜欢这里的更正,所以请开火。

  1. 获取“nav”类的所有元素。这些是我们想要转移焦点的元素。

  2. 从此集合中,找到以前关注的元素及其索引。不幸的是,Internet Explorer和FireFox要么没有提供确定哪个元素集中的方法,要么不同。我在这里用自定义的“isFocused”属性作弊。

  3. 如果没有先前聚焦的元素,请将集合中的第一个元素设置为聚焦,并将isFocused属性添加到其中。

  4. 如果有先前聚焦的元素,请从中删除isFocused属性并在其后找到下一个“nav”元素。此代码支持从集合的开头重新开始,因此如果您使用此技术聚焦最后一个元素并按Shift +“*”,则第一个元素将被聚焦。

  5. 这种方法存在问题。这是狭隘的,它忽略了用户手动关注的元素。它还为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();                
              }             
            }   
          }
        );
      }
    );