【问题标题】:Meteor keydown/keyup events outside inputMeteor keydown/keyup 事件在输入之外
【发布时间】:2016-09-12 07:18:36
【问题描述】:

阅读本帖后: Keypress events stopped working outside of "input" elements in Meteor after update to 0.5.2

我知道 keydown/keyup 事件是不可能的,除非你在 Rendered 回调中将它添加到 $(document).on('keyup').....。

但是那个线程已经超过 2 年了。现在还是这样吗?是否仍然没有在 input/contenteditable 之外添加 keyup/keydown 事件的“流星方式”?

【问题讨论】:

    标签: meteor


    【解决方案1】:

    您的问题的答案是肯定的,仍然可以这样做。您仍然可以通过在 onCreatedonRendered 方法中添加事件侦听器来为单个模板制作关键事件侦听器,如下所示:

    Template.myTemplate.onCreated(() => {
        $(document).on('keyup', (e) => {
            console.log('A key has come up.');
        });
    });
    

    您不必按照当前接受的答案的建议在Meteor.startup 中执行此操作。

    销毁事件,使其不再在此模板中时不会持续存在:

    Template.myTemplate.onDestroyed(() => {
        $(document).off('keyup');
    });
    

    【讨论】:

    • 除了模板销毁后事件还在
    • 可以,但是模板销毁后可以清除。
    • 不过既然你提出来了,我就在这里补充一下。
    • 我同意这应该是公认的答案;虽然清理功能不正确——应该是onDestroyed
    【解决方案2】:

    如果要在页面加载时为整个页面添加keyup事件,“流星方式”是使用Meteor.startup

    Meteor.startup(function () {
      $(document).on('keyup', function (e) {...});
    }
    

    【讨论】:

    • 这很好,但是如果我只想在单个模板上添加一个键事件,并且即使不关注输入/可编辑元素也允许键事件发生怎么办?
    • 这是不可能的。见这里:api.jquery.com/keydown“当用户第一次按下键盘上的键时,keydown 事件被发送到一个元素。它可以附加到任何元素,但该事件只发送到具有焦点的元素。可聚焦元素可能因浏览器而异,但表单元素总能获得焦点,因此是此事件类型的合理候选者。”
    猜你喜欢
    • 2017-10-08
    • 2014-06-12
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 2016-09-21
    • 2017-02-04
    • 2012-02-08
    • 1970-01-01
    相关资源
    最近更新 更多