5

根据文档,我应该能够像处理事件一样处理关键事件keypressclick但我觉得我错过了一些东西。

我做了以下事情:

> meteor create keypressTest
> cd keypressTest
> sed -e 's/click input/keypress body/' -i .bak keypressTest.js
> meteor

但是当我按下按键时,控制台中没有任何显示,就像处理单击事件时那样。

有没有在流星中工作密钥处理的例子?我知道我可以在 jquery 中做一个解决方法,但如果可以的话,我更愿意坚持使用干净的模板事件。

4

4 回答 4

11

请注意,不推荐使用 keypress ,您可能希望使用textinput代替。

但是我确实注意到keydown并且keyup没有被弃用,因此使用其中之一可能比使用更可靠keypress。请注意,文档指定了顺序:

  1. keydown
  2. keypress
  3. keyup

如果你想对媒体采取行动,你可以使用keydown; 如果您想对电梯采取行动,请使用keyup. 我更喜欢后者,因为它仍然允许您通过在解除按键之前切换到另一个应用程序来取消按键...

于 2012-06-02T23:36:47.997 回答
8

我可以找到我的“按键”事件

Template.myTemplate.events({
    'keypress input': function(e) { console.log('key', e); }
});

或者在一个更有用的例子中

Template.myTemplate.events({
      'keyup input': function(event) {
      if (event.which === 13) {
         alert('you hit enter');
         event.stopPropagation();
         return false;
      }
   },
    ...

@tom,我在 textinput 上没有得到任何东西 :(

于 2013-04-17T04:51:58.490 回答
5

我错过了在事件映射中使用关键事件的这两个要求:

  1. 事件目标必须包含在模板中(与其他事件相同)
  2. 事件目标必须是可以输入的输入元素

第二点似乎与单击一致,因为 aclick *仅在单击按钮时触发,而不是在模板中包含的问候文本上。

于 2012-06-04T13:40:10.477 回答
1

Enter 将返回一个event.charCode = 0,而不是使用event.keyCode它将返回 13。

'keypress input': function(event) {
    if (event.keyCode == 13) {
        alert('you hit enter');
        event.stopPropagation();
        return false;
    }
}
于 2015-05-26T20:10:54.743 回答