JavaScript无法捕获“SHIFT + TAB”组合

时间:2011-04-18 19:20:02

标签: javascript jquery tabs shift

无论出于何种原因,我都无法捕获“SHIFT + TAB”组合。 我正在使用最新的jQuery。

如果我使用其他ajax / javascript等

,结果相同

这是一个简单的例子,应该像我现在理解的那样工作......

event.which或event.KeyCode总是“未定义”只有shiftKey存在于涉及“SHIFT + TAB”或后向键盘遍历的场景中,传统上是基于Windows的应用程序/ web或其他...

    function ShiftTab()
    {
      debugger;
      if(event.KeyCode == 9 && event.shiftKey) // neither this line nor the following work
//      if (event.which == 9 && event.shiftKey) // shift + tab, traverse backwards, using keyboard
      {
        return true;
      }
      else
      {
        return false;
      }
    }

这似乎是另一个与Tab顺序相关的项目,它不再像以前在基于Microsoft.Net WinForm / WebForm的应用程序中工作那样有效。

3 个答案:

答案 0 :(得分:32)

如果您使用的是jQuery,那么这应该是代码的工作方式。确保keyCode为小写。此外,jQuery将keyCode规范化为which

$(document).keyup(function (e) {
    if (e.which === 9 && e.shiftKey) {
        ShiftTab();
    }
});

如果你是简洁的JavaScript:

$(document).keyup(function (e) {
    e.which === 9 && e.shiftKey && ShiftTab();
});

jQuery 1.7 + on语法:

$(document).on('keyup', function (e) {
    e.which === 9 && e.shiftKey && ShiftTab();
});

答案 1 :(得分:1)

我创建了一个函数,我连接到我的按钮的onkeydown事件。我使用了onkeydown,因为onkeypress不能捕获我的tab键按

function ShiftTab(evt) {
        var e = event || evt; // for trans-browser compatibility
        var charCode = e.which || e.keyCode; // for trans-browser compatibility

        if (charCode === 9) {
            if (e.shiftKey) {
                $('#controlName').focus();
                return false;
            } else {
                   return true;
              }
       }

我采用这种方法来处理两个具体问题:

  1. onkeypress不会捕获标签键按
  2. 当点击shift-tab时,Shift键按下会触发功能,所以我嵌套了shiftkey修饰符检查

答案 2 :(得分:0)

在keypress事件中使用相同的代码。 选项卡更改了按键和键盘之间的元素。 这里我们得到event.key = tab和event.shiftKey = true。