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

Ben*_*aum 5 meteor

根据该文件,我应该能够处理关键事件,如keypress以同样的方式我可以处理click事件,但我觉得我失去了一些东西.

我做了以下事情:

> meteor create keypressTest
> cd keypressTest
> sed -e 's/click input/keypress body/' -i .bak keypressTest.js
> meteor
Run Code Online (Sandbox Code Playgroud)

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

在流星中是否有任何工作密钥处理的例子?我知道我可以在jquery中做一个解决方法,但如果可以,我宁愿坚持清理模板事件.

Tam*_*man 10

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

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

  1. keydown
  2. keypress
  3. keyup

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

  • 正如@ user456584所述,这里的最佳选择似乎是`input`事件,因为它不仅会在按下键时立即触发,而且还会在文本字段中可用的实际数据之后触发(这可能很重要). (3认同)
  • 从您链接到的文档:"textInput事件,最初被提议作为keypress的替代品,被删除,以支持当前的输入前和输入事件." (2认同)

zer*_*isk 8

我可以找到我的'按键'事件

Template.myTemplate.events({
    'keypress input': function(e) { console.log('key', e); }
});
Run Code Online (Sandbox Code Playgroud)

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

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

@tom,我没有得到任何关于textinput :(


Ben*_*aum 5

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

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

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