#javascript #dom #reload #barcode-scanner #event-listener
#javascript #dom #перезагрузка #сканер штрих-кода #прослушиватель событий
Вопрос:
У меня есть приложение, которое работает со сканером штрих-кода. Сканер штрих-кода взаимодействует с компьютером так, как это делала бы внешняя клавиатура, поэтому я поместил прослушиватель событий keydown в DOM для захвата ввода со сканера штрих-кода и пометки соответствующего элемента в dom. Теперь моя проблема в том, что каждый раз, когда считывается штрих-код, dom, похоже, обновляет и очищает весь выбор. Кто-нибудь может помочь? Это мой код. Кстати, все это было сделано в electron
document.addEventListener("keydown", (e) => {
if (e.key === "" || e.key === "Control") {
return
}
buffer.push(e.key);
setTimeout(() => {
if (buffer.length > 0) {
buffer.forEach((char) => {
string = string char
})
if (buffer.length >= 12) {
const tableRows = document.querySelector("tbody").querySelectorAll("tr");
tableRows.forEach((row) => {
const barcode = row.querySelector(".td_Barcode--hidden").innerText;
if (barcode === string) {
toggleRowCB(row)
}
})
} else {
console.log(buffer.length);
}
}
buffer = [];
string = "";
}, 500)
})
Комментарии:
1. Ничто здесь не должно привести к перезагрузке страницы браузером. Не могли бы вы предоставить свой HTML, а также любой другой соответствующий JavaScript?
2. @JustinTaddei Это было сделано в electron
Ответ №1:
Код кажется нормальным, но можете ли вы попробовать добавить
e.preventDefault();
для отправки. Я думаю, что когда вы сканируете штрих-код с помощью сканера штрих-кода, он имитирует чтение «Ввод», которые обходят ваши условия e.key.
Предложение пакета для обработки событий электронной клавиатуры;
Комментарии:
1. Привет. Я думаю, что я только что понял проблему. Предполагается, что функция toggleRowCB() выполняет цикл по dom и активирует флажки строк с таким штрих-кодом. Я думаю, что dom обновляется после выполнения этой проверки, в результате чего ранее выполненные проверки будут удалены. Есть ли способ обойти это, пожалуйста?