0

キーボード ショートカットにhttps://github.com/stepanvr/js-shortcuts jquery プラグインを使用しようとしています。しかし、私はこの問題に悩まされています。json データ構造でショートカット データを定義します。次に、これらのショートカットをループし、押されたショートカットを出力するときが来ると、間違ったショートカットが報告されます。どのショートカットキーを押しても、Ctrl+Shift+P の組み合わせが報告されます。JavaScript がこのハンドラ関数を処理する方法に関連していると思います。

変数データ = {
    '名前': 'Eclipse (Java)',
    'バージョン': '1.0',
    「ホットキー」: {
        「ナビゲーション」: {
            'Ctrl+Shift+R': 'ファイルなどのリソースを開く/検索する',
            'Ctrl+Shift+T' : '型を開く/検索',
            'Ctrl+E' : 'エディタを選択できます',
            'Ctrl+F8' : '視点切り替えのショートカット',
            'Alt+Left' : '履歴内の前/次の編集位置に移動',
            'Ctrl+PageUp': '前/次のエディターに切り替える',
            'F3' : 'この変数の宣言に移動',
            'Ctrl+Shift+P' : '一致するブラケットに移動'
        }
    }
};

var verify = function(msg) {
    var node = document.getElementById('debug');
    node.innerHTML += メッセージ + ' ';
};

$(document).ready(function() {
    for (data.hotkeys.Navigation の var x) {
        $.Shortcuts.add({
            タイプ:「ダウン」、
            マスク:x,
            ハンドラ:関数 () {
                (x) を確認します。
            }
        });
    }
    $.Shortcuts.start();
});
4

1 に答える 1

2

あなたの問題は、ループが進行するにつれて x 変数が変化するコールバックを設定する際のスコープにあります。次のようにクロージャーでラップする必要があります。

  for (var x in data.hotkeys.Navigation) {
    (function(x){
      $.Shortcuts.add({
          type:'down',
          mask:x,
          handler:function () {
              verify(x);
          }
      });
    })(x);
  }
于 2012-09-21T08:42:28.997 に答える