jwerty key unbinding

时间:2012-01-26 01:17:37

标签: javascript jquery

取自:https://github.com/keithamus/jwerty

有没有人知道如何在设置.key绑定后取消绑定?

作为测试,我希望在选择某些内容时全局设置

jwerty.key('↑', function(e) { e.preventDefault(); alert('up'); });

然后在取消选择该对象时解除绑定。那个东西已经设置好了,虽然我想把jwerty称为unbind但是无法弄清楚是怎么回事。

但是当我a)不知道如何明确地解除绑定或b)如果我尝试将其更改为不同的匿名函数,我仍然会看到警报。

2 个答案:

答案 0 :(得分:4)

如果你想要一个可以删除的全局密钥处理程序,你必须使用jQuery http://jsfiddle.net/mendesjuan/LxQ4H/2/

绑定它
function doit() {
  alert('up');
}
// to bind use namespaces so it can be unbound without removing
$(document.body).bind('keydown.test', jwerty.event('↑', doit));

// a button that unbinds the key handler
$('#btn').click(function(){
    $(document.body).unbind('keydown.test')
});

如果希望将键处理程序限定为HTML元素,则需要在元素上设置侦听器,而不是全局。只有当它绑定的元素具有焦点时才会触发。只需传入选择器即可将本地快捷键绑定到该元素http://jsfiddle.net/mendesjuan/LxQ4H/

jwerty.key('⌃+⇧+P/⌘+⇧+P', function () { [...] }, this, '#myinput');

如果您的元素默认不采用焦点(div),则需要通过执行以下操作使其可聚焦。 http://jsfiddle.net/mendesjuan/LxQ4H/1/

// or 0, 1,2 3 if you want it to be tabbable
document.getElementById('#mydiv').tabIndex = -1; 

这些代码示例来自https://github.com/keithamus/jwerty(您已提及的相同链接)

答案 1 :(得分:3)

如果你有jQuery可用,正如Juan Mendes所说,你可以使用jQuery的bind()方法,jwerty.event

然而,有另一种方法可以解决这个问题。使用您提供的当前代码;

jwerty.key('↑', function(e) { e.preventDefault(); alert('up'); });

jwerty的内部将为您执行绑定,但会将其添加到特殊的“keydown.jwerty”命名空间下。 (See this line of the codebase)。因此,按照您已有的代码,您只需要这样做:

$(document.body).unbind('keydown.jwerty');

使用namespaces in jquery的一个很酷的事情是你可以通过这样做来绑定所有的jwerty事件:

$(document.body).unbind('.jwerty');