Событие onchange
будет запускаться на каждом входе только с пользовательского интерфейса и клавиш ввода-вывода вверх.
В противном случае мы должны потерять фокус или нажать 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">