web-dev-qa-db-ja.com

JavaScriptは「SHIFT + TAB」の組み合わせをキャプチャできません

なんらかの理由で「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;
      }
    }

これは、Microsoft.Net WinForm/WebFormベースのアプリで従来機能していたように機能しなくなった、タブ順序に関連するさらに別の項目のようです。

18
Bohemian

JQueryを使用している場合、これがコードの動作方法です。 keyCodeが小文字であることを確認してください。また、jQueryはkeyCodewhichに正規化します。

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

ボタンのonkeydownイベントに接続する関数を作成しました。 onkeypressはタブキーの押下をキャプチャしないため、onkeydownを使用しました

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

私はこのアプローチを採用して、2つの特定の問題に対処しました。

  1. onkeypressはタブキーの押下をキャプチャしません
  2. Shift-Tabをクリックすると、Shiftキーを押すと機能がトリガーされるため、ShiftKey修飾子チェックをネストしました。
1
Adriang

keypressイベント内で同じコードを使用します。タブは、キー押下とキーアップの間で要素を変更します。ここでは、event.key = tabおよびevent.shiftKey = trueを取得します。

0
mukund patel