2012-09-21 3 views
0

키보드 단축키에 대해 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(); 
}); 

답변

2

귀하의 문제는 X 변수가 루프가 지남에 따라 변화하는 콜백을 설정하는 범위와 함께, 당신은 지금처럼 폐쇄에 포장해야합니다 :

for (var x in data.hotkeys.Navigation) { 
    (function(x){ 
     $.Shortcuts.add({ 
      type:'down', 
      mask:x, 
      handler:function() { 
       verify(x); 
      } 
     }); 
    })(x); 
    } 
+0

YEAHHH, 않았다 장난!!! – davidgale

관련 문제