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)