【问题标题】:Trouble outputting the right variable value from within closure无法从闭包中输出正确的变量值
【发布时间】:2012-09-21 08:36:19
【问题描述】:

我正在尝试使用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(); });

【问题讨论】:

    标签: javascript jquery jquery-plugins


    【解决方案1】:

    您的问题在于设置回调的范围,x 变量随着循环的进行而变化,您必须将其包装在一个闭包中,如下所示:

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

    【讨论】:

      猜你喜欢
      • 2017-03-14
      • 1970-01-01
      • 2020-01-24
      • 2020-01-10
      • 2021-02-08
      • 2017-06-30
      • 2019-04-01
      • 2020-01-16
      • 2016-04-24
      相关资源
      最近更新 更多