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验证=功能(味精){
    var node = document.getElementById('debug');
    node.innerHTML += 味精 + ' ';
};

$(文档).ready(函数() {
    for (var x in data.hotkeys.Navigation) {
        $.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 回答