jquery热键动态绑定

jquery热键动态绑定,jquery,jquery-plugins,hotkeys,Jquery,Jquery Plugins,Hotkeys,我正在使用jresig的jquery热键,它看起来可以用于单个热键。问题是我有一个数据库热键列表,我想读取它们并动态分配热键。我有一个热键和值列表,这是我的js: $(document).ready(function() { var keyList = []; $('.hotkey').each( function(){ hotkey = $(this).attr('value'); hotkey = hotkey.substring(1,hotkey.length

我正在使用jresig的jquery热键,它看起来可以用于单个热键。问题是我有一个数据库热键列表,我想读取它们并动态分配热键。我有一个热键和值列表,这是我的js:

$(document).ready(function() {  
  var keyList = [];

  $('.hotkey').each( function(){
    hotkey = $(this).attr('value');
    hotkey = hotkey.substring(1,hotkey.length-1);

    myVal = $(this).next().attr('value');

    alert("binding " + hotkey);

    $(document).bind('keydown', hotkey, function() {
      alert("YOU PRESSED " + hotkey);
      $('.chosen-category-id').attr('value', hotkey);
      $('.chosen-category-name').attr('value', myVal);
    });  

  })
})
现在发生的是,每次我按下一个键,它只会提醒它绑定的最后一个热键。这里的逻辑有问题吗?我不想复制粘贴大量的document.bind行,所以我尝试动态地这样做

编辑

我用以下代码重构了我的代码:

$(document).ready(function() {  

  var keyList = [];
  var keyValues = [];

  $('.hotkey').each( function(){
    hotkey = $(this).attr('value');
    hotkey = hotkey.substring(1,hotkey.length-1);

    keyList.push(hotkey);

    keyValues.push($(this).next().attr('value')) ;
  })


  $.each(
    keyList,
    function(index, key) {
      $(document).bind('keydown', key, function() {
        alert("O HAI YOU PRESSED " + key);
        $('.chosen-category-id').attr('value', key);
        $('.chosen-category-name').attr('value', keyValues[index]);
        return false;
      });  
    }
  )


})

它现在起作用了,但我很好奇为什么这个能起作用而另一个不行。热键变量是否一直覆盖上一次迭代?而且,第一个代码看起来更有效,因为它只执行一个循环,而第二个代码执行两个循环。

我也遇到了类似的问题。我有这个:

$(document).bind('keypress', keyBinding, function(e) {
    e.preventDefault();
    $(this).trigger("click");
});
但在阅读了一些示例后,我将其改为:

$(document).bind('keydown', keyBinding, function(e) {
    $(this).trigger("click");
    return false; 
});
这两个变量都在一个each循环中,就像您的循环一样,我将keybinding变量指定给Ctrl+s或Ctrl+Right之类的对象。有趣的部分显然是按键和返回false;。我现在做的一切都很好。我的第一个代码并不是在所有浏览器中都能用,但在FF中却能用


我学到的另一个技巧是,必须小心绑定。有些绑定不能在所有浏览器中工作。例如,Ctrl+n在Chrome中不起作用,也可能在其他浏览器中不起作用。上包含测试页。我对其中一个进行了改造,使其在本地开发网站上工作,这样我就可以测试组合键,直到我在页面上找到了有效的组合键。

我也遇到了类似的问题。我有这个:

$(document).bind('keypress', keyBinding, function(e) {
    e.preventDefault();
    $(this).trigger("click");
});
但在阅读了一些示例后,我将其改为:

$(document).bind('keydown', keyBinding, function(e) {
    $(this).trigger("click");
    return false; 
});
这两个变量都在一个each循环中,就像您的循环一样,我将keybinding变量指定给Ctrl+s或Ctrl+Right之类的对象。有趣的部分显然是按键和返回false;。我现在做的一切都很好。我的第一个代码并不是在所有浏览器中都能用,但在FF中却能用


我学到的另一个技巧是,必须小心绑定。有些绑定不能在所有浏览器中工作。例如,Ctrl+n在Chrome中不起作用,也可能在其他浏览器中不起作用。上包含测试页。我对其中一个进行了改造,使其在本地开发网站上工作,这样我就可以测试组合键,直到我在页面上找到有效且有意义的组合键。

您也可以发布所使用的标记吗?最好是在jsfiddle.net上?关于标记,您需要知道什么?它们只是很多带有类热键的输入按钮和热键格式的值,而且我编辑了这个问题,顺便说一句,我并不想听起来像个混蛋。我只是觉得标记不相关,因为我得到的是正确的值,问题是绑定的分配。你也可以发布使用的标记吗?最好是在jsfiddle.net上?关于标记,您需要知道什么?它们只是很多带有类热键的输入按钮和热键格式的值,而且我编辑了这个问题,顺便说一句,我并不想听起来像个混蛋。我只是觉得标记不相关,因为我得到了正确的值,问题是绑定的分配