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

18

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

如果我使用其他ajax/javascript等,结果相同。

这里是一个简单的例子,根据我目前的理解应该可以工作...

在涉及“SHIFT+TAB”或向后键盘遍历的情况下,例如传统的基于Windows的应用程序/网络或其他情况下,event.which或event.KeyCode始终为“未定义”,只有shiftKey存在...

    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;
      }
    }

这似乎是又一个与选项卡顺序相关的项目,在Microsoft.Net WinForm / WebForm应用程序中已不再像传统的工作方式一样工作。


2
如果这个问题已经完整回答了,您应该接受一个答案 :) - Eli
3个回答

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();
});

3
这种方法并不总是有效,我的意思是,对于keyup事件来说。这是因为,例如,我先松开Shift键再松开Tab键。这将返回9和false,因为Tab键被按下但Shift键没有被按下。如果你先松开Tab键,那么它就可以了。但是使用keydown事件就可以,因为你按下Tab键时Shift键已经被按下了。 - bokkie
无论我以什么顺序释放tab,这对我都不起作用。不确定为什么我的代码无法识别与tab一起按下的shift键。 - CIA
@CIA 我认为bokkie在他的回答中已经解决了你的问题。 但是基本上onKeyUp会触发两次,一次是Shift键,一次是Tab键。事件处理程序默认情况下不知道SHIFT键有任何特殊之处 - 它只是另一个键。您必须在KeyDown或KeyPress上检查事件,以便在注册Tab时检查SHIFT。 - RoboBear

2

我创建了一个函数,并将其与按钮的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无法捕获Tab键按下
  2. 当点击Shift-Tab时,Shift键按下会触发函数,因此我必须嵌套ShiftKey修饰符检查

0

在keypress事件中使用相同的代码。 制表符在keypress和keyup之间更改元素。 这里我们得到event.key = tab和event.shiftKey = true。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接