Перейти до вмісту

Barcode Scanner Emulator

Сканер працює в Notepad, але не в POS

Це одна з найчастіше повідомлюваних проблем зі штрихкодами, і вона майже завжди означає, що сканер і з’єднання в порядку — помилка в тому, як застосунок обробляє введення з клавіатури.

Проблема

Зчитування у звичайний текстовий редактор щоразу дає правильне значення, але зчитування в систему POS, вебзастосунок або внутрішній інструмент не дає нічого, дає часткове введення або хибну поведінку.

Можливі причини

  • Цільове поле не має фокуса клавіатури в момент зчитування, або фокус на елементі, який не є полем введення
  • Обробник keydown викликає preventDefault() так, що блокує введення символів
  • Застосунок покладається на події paste або input, які натискання сканера природно не запускають так, як ви очікуєте
  • Маска введення або регулярний вираз перевірки відхиляє дійсний символ у зчитаних даних
  • Суфікс ENTER/TAB запускає небажану дію (передчасне надсилання форми, закриття модального вікна, перехід в інше місце)
  • Зчитування відбувається швидше, ніж обробник введення з debounce або throttle встигає зареєструвати кожне натискання

Діагностичний процес

  1. У тому самому браузері відкрийте тестер подій клавіатури і зчитайте штрихкод. Якщо тут кожен символ записується правильно, браузер і операційна система отримують події як слід, тож помилка в обробці подій вашого застосунку.
  2. Перевірте, чи поле введення у фокусі безпосередньо перед зчитуванням у реальному процесі (а не лише коли ви клацаєте його вручну під час тесту).
  3. Відкрийте консоль DevTools браузера і пошукайте помилки JavaScript, викинуті під час зчитування: помилка всередині обробника може тихо зупинити обробку подальших натискань.
  4. Тимчасово приберіть маску введення, перевірку або логіку debounce і протестуйте знову, щоб ізолювати шар, який відкидає введення.
  5. Перевірте, чи застосунок слухає keypress (застаріле й ненадійне для деяких клавіш) замість keydown/keyup.

Як виправити

  • Забезпечте програмний фокус цільового поля щоразу, коли процес очікує зчитування (наприклад, одразу після додавання позиції)
  • Замініть слухачів keypress на keydown/keyup, бо keypress застарілий і обробляє деякі клавіші непослідовно
  • Перегляньте виклики preventDefault() в обробниках клавіатури, щоб вони не блокували правомірні символьні клавіші
  • Послабте маски введення й перевірку, щоб вони приймали весь діапазон символів, який можуть дати ваші символіки штрихкодів, а потім перевіряйте зібране значення, а не окремі натискання
  • Узгодьте суфікс сканера з тим, чого очікує форма (див. Суфікси ENTER і TAB)

Пов’язані інструменти

Тестер подій клавіатури · Тестер введення штрихкодів