I am trying to build following functionality:
User can type number on keyboard while the tab is active, and this can be a number with several digits. How can I get the whole number after the delay time between the keyup event is finished?
I have written following code, but I am getting the buffer on every keyup, and I only need to get the final result. What am I doing wrong?
The code so far:
const delay = 1000
const keystrokeDelay = delay;
let state = {
buffer: [],
lastKeyTime: Date.now()
};
document.addEventListener('keyup', event => {
const key = event.key;
const currentTime = Date.now();
let buffer = [];
if (currentTime - state.lastKeyTime > keystrokeDelay) {
buffer = [key];
} else {
buffer = [...state.buffer, key];
}
state = {buffer: buffer, lastKeyTime: currentTime};
});
I have written following code, but I am getting the buffer on every keyup, and I only need to get the final result. What am I doing wrong?
You could make use of setTimeout
and clearTimeout
.
const delay = 1000
const keystrokeDelay = delay;
let keyTimeout = null;
let state = {
buffer: [],
lastKeyTime: Date.now()
};
document.addEventListener('keyup', event => {
window.clearTimeout(keyTimeout);
const key = event.key;
const currentTime = Date.now();
let buffer = [];
if (currentTime - state.lastKeyTime > keystrokeDelay) {
buffer = [key];
} else {
buffer = [...state.buffer, key];
}
state = {buffer: buffer, lastKeyTime: currentTime};
keyTimeout = window.setTimeout((wholeString) => console.log(wholeString), delay, buffer.join(''))
});