Barcode Scanner Emulator
Сканер працює в Notepad, але не в POS
Це одна з найчастіше повідомлюваних проблем зі штрихкодами, і вона майже завжди означає, що сканер і з’єднання в порядку — помилка в тому, як застосунок обробляє введення з клавіатури.
Проблема
Зчитування у звичайний текстовий редактор щоразу дає правильне значення, але зчитування в систему POS, вебзастосунок або внутрішній інструмент не дає нічого, дає часткове введення або хибну поведінку.
Можливі причини
- Цільове поле не має фокуса клавіатури в момент зчитування, або фокус на елементі, який не є полем введення
- Обробник
keydownвикликаєpreventDefault()так, що блокує введення символів - Застосунок покладається на події
pasteабоinput, які натискання сканера природно не запускають так, як ви очікуєте - Маска введення або регулярний вираз перевірки відхиляє дійсний символ у зчитаних даних
- Суфікс ENTER/TAB запускає небажану дію (передчасне надсилання форми, закриття модального вікна, перехід в інше місце)
- Зчитування відбувається швидше, ніж обробник введення з debounce або throttle встигає зареєструвати кожне натискання
Діагностичний процес
- У тому самому браузері відкрийте тестер подій клавіатури і зчитайте штрихкод. Якщо тут кожен символ записується правильно, браузер і операційна система отримують події як слід, тож помилка в обробці подій вашого застосунку.
- Перевірте, чи поле введення у фокусі безпосередньо перед зчитуванням у реальному процесі (а не лише коли ви клацаєте його вручну під час тесту).
- Відкрийте консоль DevTools браузера і пошукайте помилки JavaScript, викинуті під час зчитування: помилка всередині обробника може тихо зупинити обробку подальших натискань.
- Тимчасово приберіть маску введення, перевірку або логіку debounce і протестуйте знову, щоб ізолювати шар, який відкидає введення.
- Перевірте, чи застосунок слухає
keypress(застаріле й ненадійне для деяких клавіш) замістьkeydown/keyup.
Як виправити
- Забезпечте програмний фокус цільового поля щоразу, коли процес очікує зчитування (наприклад, одразу після додавання позиції)
- Замініть слухачів
keypressнаkeydown/keyup, боkeypressзастарілий і обробляє деякі клавіші непослідовно - Перегляньте виклики
preventDefault()в обробниках клавіатури, щоб вони не блокували правомірні символьні клавіші - Послабте маски введення й перевірку, щоб вони приймали весь діапазон символів, який можуть дати ваші символіки штрихкодів, а потім перевіряйте зібране значення, а не окремі натискання
- Узгодьте суфікс сканера з тим, чого очікує форма (див. Суфікси ENTER і TAB)