Перейти к содержимому

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)

Связанные инструменты

Тестер событий клавиатуры · Тестер ввода штрихкода