【问题标题】:JavaScript can't capture "SHIFT+TAB" combinationJavaScript 无法捕获“SHIFT+TAB”组合
【发布时间】:2011-08-08 03:26:14
【问题描述】:

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

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

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

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

    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 的应用程序中那样工作。

【问题讨论】:

  • 如果这个问题是完整的,你应该接受一个答案:)

标签: javascript jquery tabs shift


【解决方案1】:

如果您使用的是 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();
});

【讨论】:

  • 这并不总是有效的,我的意思是,使用 keyup。那是因为,例如,我首先松开了 shift 选项卡。所以这将返回 9 和 false,因为 tab 被按下但 shift 不是。如果你先放开标签,那就没问题了。但是使用 keydown 它会起作用,因为你按下 tab 并且已经按下了 shift。
  • 无论我发布tab 的顺序如何,这对我都不起作用。不知道为什么我的代码不能识别shift 按键和tab
  • @CIA 我认为 bokkie 得到了你的回答。但基本上 onKeyUp 会触发两次,每个键一次(Shift 和 Tab)。默认情况下,事件处理程序不知道 SHIFT 有什么特别之处——它只是另一个键。您必须检查 KeyDown 或 KeyPress 上的事件,以便在注册选项卡时检查 SHIFT。
【解决方案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 修饰符检查

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-09-19
      • 2023-03-24
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多