【问题标题】:How to log key presses/keyboard events for a short period of time?如何在短时间内记录按键/键盘事件?
【发布时间】:2016-05-19 16:52:21
【问题描述】:

我正在用 Javascript 编写一个心理学实验,只需要记录一段时间内的按键操作。我现在已经花了四个小时在谷歌上搜索,但仍然无法弄清楚如何做到这一点,即使是不优雅的。

我使用以下方法读取键盘事件:

$(document).keydown(function (event) {  ...... }  

我认为如果我让人们通过鼠标单击按钮来响应会更容易(添加侦听器事件?),但是:

  • 我无法通过鼠标点击收集响应,并且;

  • 我不知道如何在文档中添加/分离侦听器(也许 这不是问题)

同事们通过在实验的每次迭代/试验中重新加载页面来完成此操作,但这不是我的选择。

有人可以帮帮我吗?

【问题讨论】:

  • 使用命名空间绑定/解除绑定。这是你的问题吗?

标签: javascript jquery keyboard


【解决方案1】:

jQuery 允许您使用命名空间(在句点之后)为事件名称添加后缀,使其能够唯一标识事件处理程序,以便以后使用完全相同的名称删除。

您需要改用on

// Use on with a namespaced event
$(document).on('keydown.mytest', function (event) {
   // record keys
});

// After 5 seconds...    
setTimeout(function(){
    // turn off the specific keydown event we registered above
    $(document).off('keydown.mytest');
}, 5000);

【讨论】:

  • 非常感谢!我弄错的是后面的语法。不过,有些东西我仍然不明白 - 我附加到文档的事件必须在第一个命令中指定,对吗?起初我试图完全改变这个名字,但它坏了。但是我猜你给它指定了命令+修饰符标签,以便以后可以参考?
  • @ereii:on 有几个版本,但主要的两个是这个(它只是替换了 keypress() 等等效函数和委托版本(它有一个 jQuery 选择器作为第二个参数,用于动态添加元素)。
  • 非常感谢。在我自己弄清楚这个逻辑之前,应该是明年。
  • 我完全不知道,因为它确实解决了我的问题。我很快就被否决了,我认为这是因为这是一个相当愚蠢/基本的问题(但我确实在发布前四个小时确实在谷歌上做了四个小时!)。有点令人失望,因为我真的没有其他地方可以去寻求帮助,但至少在这里你设法帮助了我。对不起,如果这就是你被拖累的原因-___-
【解决方案2】:
$( yourelement ).on( "keypress", function() {
   //do something
});

setTimeout(function(){ 
    $( yourelement ).off( "keypress" ); 
}, 3000); //time out after 3 seconds

【讨论】:

  • 只需将操作更改为按键。使用按键打开和关闭工作。我会为你更新我的代码,
  • 谢谢!我选择了下一条评论,因为它给了我更多的功能,但我意识到你写的东西会做得很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 2012-08-06
  • 2013-03-12
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多