2009-09-16 73 views
0

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

+1

告诉他们使用TAB键吗? – nickf 2009-09-16 03:10:06

+1

:)是的,我建议,但没有太多的事情可以对付固执的人与你一起工作.. – Hitz 2009-09-16 03:16:26

回答

0

这是一个俗套的解决方案,但在这里。

一些解释,这是什么试图做。我想在这里更正,所以请开火。

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

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

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

  4. 如果存在以前关注的元素,请从其中移除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();     
      }    
     } 
     } 
    ); 
    } 
); 
+0

感谢您的努力 – Hitz 2009-09-16 05:58:00

0
$("#theNextButton").focus(); 

,并尽量做移+是像这样做的另一个关键:

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 
    } 

}); 

你将不得不拿出一个办法把重点放在“下一个”控制自己。它不应该太难。我现在要去玩一些后果。

相关问题