如何处理流星中的关键事件?

时间:2012-06-02 16:22:07

标签: meteor

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

我做了以下事情:

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

但是当我按下按键时,控制台中没有任何内容像处理点击事件时那样出现。

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

4 个答案:

答案 0 :(得分:10)

请注意keypress is deprecated,您可能希望使用textinput

但我注意到keydownkeyup未被弃用,因此使用其中一个可能比使用keypress更可靠。请注意,文档指定了顺序:

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

答案 1 :(得分: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上没有得到任何东西:(

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:1)

Enter将返回event.charCode = 0,而是使用event.keyCode,这将返回13。

'keypress input': function(event) {
    if (event.keyCode == 13) {
        alert('you hit enter');
        event.stopPropagation();
        return false;
    }
}