Hoppa till innehållet

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 anropar preventDefault() på ett sätt som blockerar teckeninmatning
  • Programmet förlitar sig på händelserna paste eller input, 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

  1. Ö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.
  2. 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).
  3. Ö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.
  4. Ta tillfälligt bort inmatningsmask, validering eller debounce-logik och testa igen för att isolera vilket lager som tappar inmatningen.
  5. Kontrollera om programmet lyssnar på keypress (föråldrat och otillförlitligt för vissa tangenter) i stället för keydown/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 keypress med keydown/keyup, eftersom keypress ä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)

Relaterade verktyg

Tangentbordshändelsetestaren · Streckkodsinmatningstestaren