2

我有一个关于JS中的键盘事件的问题。JS - 键盘事件 - 听/ UNLISTEN

首先,请不要回答我使用jQuery方法,我知道大部分(绑定/解除绑定,开/关,一个...),但我与有一个内部框架而努力没有jQuery,即使我们大部分项目都使用了jQuery。因此,我有一个模块,实际上是一个基于Swipe.js的滑动工具,并且可以在Web和移动环境中工作(兼容IE 7+,WebKit(Chrome & Safari),Moz,Opera和IE10/Windows Phone)

在对鼠标/触摸事件没有任何问题的情况下,受0123xx启发的绑定和解除绑定方法对于detachEvents方法的小修改似乎很有效。

然后我会根据“的keydown”事件来实现键盘控制功能。我不确定keyydial和keypress事件之间有什么区别,除了keypressEvent.preventDefault()不阻止小滚动效果,所以我使用keydown。)

因为可以添加在同一页上许多挥笔,我开始听,只有当任何刷卡聚焦该keydown事件(请注意,我添加了一个“的tabindex”属性,以使该元件得到集中)。

<div id="swipe1" class="swipe" tabindex='0'> 
    <ul> 
     [...] 
    </ul> 
</div> 

然后,当轻扫处理 'touchstart'/ '点击'/ 'MSPointerDown' 事件, 我关注它:

onTouchStart: function(e) { 
    this.container.focus(); // Refers to the div#swipe1.swipe element 
    [...] 
    return false; 
} 

onFocus: function (e) { 
    if (this.activateKeyboardControls) { // Keyboard control is optional 
     this.addListener(document, 'keydown', this, true); 
    } 
} 

onBlur: function (e) { 
    if (this.activateKeyboardControls) { // Keyboard control is optional 
     this.removeListener(document, 'keydown', this, true); 
    } 
} 

但不幸的是,的removeListener不起作用。

我的意思是,当元素失去焦点(blur事件解雇),但它仍然处理的keydown事件......

是因为它是在文档对象上绑定? 我已经阅读了一些使用一些布尔值的解决方案,但我正在寻找一种更干净的方式来管理它。

这是烦人的,因为当我将焦点放到许多挥笔,他们每个人的是,当我按下键盘swipping。

在此先感谢!

回答

0

我不知道为什么我的回答已被删除的原因 - 发布后2周以上 - 但无论如何,这是我如何解决它:

它来自的“类型”参数的addEventListener /的attachEvent方法,第一个这样的...

我结合它的对象上,而不是在窗口上,并且在不起泡。

var target = e.target || e.srcElement; 
if (this.activateKeyboardControls) { 
    this.addListener(target, 'keydown', this, false); 
}