Barcode Scanner Emulator
Läsaren fungerar i Notepad men inte i POS
Det här är ett av de mest rapporterade streckkodsproblemen, och det betyder nästan alltid att läsaren och anslutningen är i ordning — buggen sitter i hur programmet hanterar tangentbordsinmatning.
Problem
Avläsning i en vanlig textredigerare ger rätt värde varje gång, men avläsning i POS-systemet, webbappen eller det interna verktyget ger ingenting, delvis inmatning eller fel beteende.
Möjliga orsaker
- Målfältet har inte tangentbordsfokus vid avläsningen, eller så ligger fokus på ett element som inte är ett inmatningsfält
- En
keydown-hanterare anroparpreventDefault()på ett sätt som blockerar teckeninmatning - Programmet förlitar sig på händelserna
pasteellerinput, som läsarens tangenttryckningar inte utlöser på det sätt du förväntar dig - En inmatningsmask eller ett valideringsuttryck avvisar ett giltigt tecken i den avlästa nyttolasten
- Suffixet ENTER/TAB utlöser en oavsiktlig åtgärd (skickar ett formulär för tidigt, stänger en modal, navigerar bort)
- Avläsningen sker snabbare än en inmatningshanterare med debounce eller throttle hinner registrera varje tangenttryckning
Diagnostikflöde
- Öppna tangentbordshändelsetestaren i samma webbläsare och läs av streckkoden. Om varje tecken loggas korrekt här tar webbläsaren och operativsystemet emot händelser som de ska, så buggen sitter i programmets händelsehantering.
- Kontrollera om inmatningsfältet har fokus precis innan avläsningen sker i det verkliga flödet (inte bara när du klickar i det manuellt under test).
- Öppna webbläsarens DevTools-konsol och leta efter JavaScript-fel som kastas under avläsningen — ett fel mitt i en hanterare kan tyst stoppa bearbetningen av fler tangenttryckningar.
- Ta tillfälligt bort inmatningsmask, validering eller debounce-logik och testa igen för att isolera vilket lager som tappar inmatningen.
- Kontrollera om programmet lyssnar på
keypress(föråldrat och otillförlitligt för vissa tangenter) i stället förkeydown/keyup.
Så åtgärdar du
- Se till att målfältet får fokus programmatiskt när flödet förväntar sig en avläsning (till exempel direkt efter att en rad har lagts till)
- Ersätt lyssnare för
keypressmedkeydown/keyup, eftersomkeypressär föråldrat och hanterar vissa tangenter inkonsekvent - Granska anrop till
preventDefault()i tangentbordshanterare så att de inte blockerar giltiga teckentangenter - Lätta på inmatningsmasker och validering så att de accepterar hela teckenintervallet som dina streckkodssymbologier kan ge, och validera sedan det sammansatta värdet i stället för enskilda tangenttryckningar
- Matcha läsarens suffix med det formuläret förväntar sig (se Suffixen ENTER och TAB)