取自:https://github.com/keithamus/jwerty
有没有人知道如何在设置.key绑定后取消绑定?
作为测试,我希望在选择某些内容时全局设置
jwerty.key('↑', function(e) {
e.preventDefault();
alert('up');
});
然后在取消选择该对象时解除绑定。那个东西已经设置好了,虽然我想把jwerty称为unbind但是无法弄清楚是怎么回事。
但是当我a)不知道如何明确地解除绑定或b)如果我尝试将其更改为不同的匿名函数,我仍然会看到警报。
答案 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');