首页 > 解决方案 > 我怎么知道是什么触发了变化?

问题描述

有没有办法知道什么类型的移动触发了输入 type="number" 上的onChange事件

我解释 :

在此处输入图像描述

我想知道更改是来自“文本”区域还是“向下和向上箭头”区域。可能吗 ?

标签: javascripthtmleventsonchange

解决方案


onchange事件将仅在来自 UI 和上下键输入的每个输入处触发。
否则,我们必须松开焦点,或者按下回车键来触发这个事件。

所以我们可以检查我们是否仍然是 activeElement 并因此从 UI 中触发,或者不是来自于打字。
除了 Enter 键之外...

let enter_down = false;
inp.addEventListener('change', e => {
  if(enter_down || inp !== document.activeElement) {
    console.log('typing');
  }
  else {
    console.log('arrows');
  }
});

inp.addEventListener('keydown', e => {
  if(e.key === 'Enter') {
    enter_down = true;
  }
});
inp.addEventListener('keyup', e => {
  if(e.key === 'Enter') {
    enter_down = false;
  }
});
<input type="number" id="inp">


推荐阅读