执行所有事件侦听器回调后执行代码

时间:2018-05-27 09:25:15

标签: javascript addeventlistener

我将事件监听器添加到我的输入中:

['input', 'keypress', 'keyup', 'keydown'].forEach(eventName => {
    document.getElementById('my-input').addEventListener(eventName, (e) => {
      // handle eventName for input
   });
});

我希望在执行所有已注册事件的回调后执行一些代码。 有可能的?如果是,请解释如何做到这一点

修改

但我不知道会触发哪些事件。 例如,以用户为中心的输入,然后按下Esc,在这种情况下,只会触发keyup和keydown事件。

编辑2: 我的任务是处理页面上的用户交互。 我应该处理用户之间的交互以及一次特定的交互(关注字段,字符输入,击键),并且在发生这种交互的所有回调之后,我应该执行一些代码。

  1. 用户关注inout =>焦点回调被执行

  2. 应该执行一些代码

  3. 用户按下Esc =>执行keydown和keyup回调

  4. 应该执行一些代码

  5. 用户在字段中输入符号=>输入,按键,键盘,键控回调被执行

  6. 应该执行一些代码

1 个答案:

答案 0 :(得分:5)

在所有同步事件完成后立即使用setTimeout运行函数:

let timeout;
['input', 'keypress', 'keyup', 'keydown']
  .forEach(eventName => {
    document.getElementById('my-input').addEventListener(eventName, (e) => {
      // handle eventName for input
      console.log(eventName + ' triggered');
      if (timeout) clearTimeout(timeout);
      timeout = setTimeout(afterEvents);
    });
  });
function afterEvents() {
  console.log('all event listeners have been triggered');
}
<input id="my-input">