jQuery键盘快捷方式插件unbind在我的演示中不起作用,但没有显示任何错误

时间:2015-05-23 19:08:26

标签: javascript jquery keyboard-shortcuts

我正在尝试在我的JavaScript应用中使用此 jQuery键盘快捷键插件 https://github.com/jeresig/jquery.hotkeys

我遇到一个问题,即使用事件监听器开始监听我的按键操作的绑定方法有效,但unBind方法似乎不起作用。

以下是一个示例:http://jsfiddle.net/80k2uf3w/13/

// Enable our keyboard shortcut for the "number 1 key"
function bindOneKey(){
    alert("keyboard Event listener is now listening for key number 1 to be pressed!");
    jQuery(document).bind('keydown', '1',function (evt){
        alert("keyboard key number 1 was pressed");
        return false;
    });
}

// Disable our keyboard shortcut for the "number 1 key"
function unBindOneKey(){
    jQuery(document).unbind('keydown', '1');
    alert("keyboard Event listener for key number 1 has been killed!");
}

// Demo buttons to enable/disable our Keyboard shortcut Event listeners
$(document).ready(function(){
    $('#bindOne').bind('click', bindOneKey);
    $('#unBindOne').bind('click', unBindOneKey);
}

演示的HTML按钮

<input type="button" id="bindOne" value="Bind 1 keyboard key" />
<input type="button" id="unBindOne" value="unBind 1 keyboard key" />

按下bind 1按钮后,在该演示页面上,您可以按键盘上的数字1键,并从回调功能中获取警报。

之后,如果您按下unbind 1按钮然后再次按1 key,它仍然有效,而不是取消绑定!

有谁知道问题是什么?

这只是展示功能和问题的最基本的演示。我的真实应用程序基本上会在打开模态时启用键盘快捷键,然后在模态关闭时禁用/取消绑定它们。这就是为什么我需要让这个工作。

我的另一个选择是找到一个新的键盘快捷键库,它看起来大约有50个,但我喜欢这个,因为它看起来很轻巧,也是由一个非常了解的JavaScript开发人员构建的。所以我在这里发帖,看看我们是否可以先让这个100%工作。

有一点需要注意的是,在库的GItHub页面上,似乎测试文件使用的是jQuery v1.4.x旧版本,也许这可能是问题的一部分,但我不确定该库的大多数工作,我也没有控制台错误!

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我发现了一个类似的问题,其他人试图做同样的事情启用和禁用键盘快捷键,因为Modal在此问题中使用此库打开和关闭jQuery Hotkeys - unbinding?

似乎没有任何完美的解决方案,所以我可能会查看其他库,或者只是手动编写我需要的快捷键,而不需要库。它可能会给我更多的控制权。