我正在尝试将https://github.com/stepanvr/js-shortcuts jquery插件用于键盘快捷键。但是我遇到了这个问题。我在json数据结构中定义了快捷方式数据。然后我遍历这些快捷方式,当输出按下的快捷方式时,报告错误的快捷方式。无论我按哪一个快捷键,我都会按Ctrl + Shift + P组合报告。我相信它与JavaScript如何处理这个处理函数有关。
var data = { 'name' : 'Eclipse (Java)', 'version' : '1.0', 'hotkeys' : { 'Navigation' : { 'Ctrl+Shift+R' : 'Open / Search for resources, e.g. files', 'Ctrl+Shift+T' : 'Open / Search for Types', 'Ctrl+E' : 'Allows to select an editor', 'Ctrl+F8' : 'Shortcut for switching perspectives', 'Alt+Left' : 'Go to previous/ next editor position in history', 'Ctrl+PageUp' : 'Switch to previous/next editor', 'F3' : 'Go to the declaration of this variable', 'Ctrl+Shift+P' : 'Go to the matching bracket' } } }; var verify = function(msg) { var node = document.getElementById('debug'); node.innerHTML += msg + ' '; }; $(document).ready(function() { for (var x in data.hotkeys.Navigation) { $.Shortcuts.add({ type:'down', mask:x, handler:function () { verify(x); } }); } $.Shortcuts.start(); });
答案 0 :(得分:2)
你的问题在于设置回调的范围,x变量随着循环的进行而改变,你必须将它包装在一个闭包中,如下所示:
for (var x in data.hotkeys.Navigation) {
(function(x){
$.Shortcuts.add({
type:'down',
mask:x,
handler:function () {
verify(x);
}
});
})(x);
}