Siirry sisältöön

Barcode Scanner Emulator

Lukija toimii Notepadissa mutta ei POS-järjestelmässä

Tämä on yksi eniten ilmoitetuista viivakoodiongelmista, ja se tarkoittaa lähes aina, että lukija ja yhteys ovat kunnossa — virhe on siinä, miten sovelluksesi käsittelee näppäimistösyötettä.

Ongelma

Pelkkään tekstieditoriin lukeminen tuottaa joka kerta oikean arvon, mutta POS-järjestelmään, verkkosovellukseen tai sisäiseen työkaluun lukeminen ei tuota mitään, tuottaa osittaisen syötteen tai väärän toiminnan.

Mahdolliset syyt

  • Kohdekentällä ei ole näppäimistökohdistusta lukuhetkellä, tai kohdistus on elementissä joka ei ole syöte
  • keydown-käsittelijä kutsuu preventDefault()-metodia tavalla, joka estää merkkien syötön
  • Sovellus nojaa paste- tai input-tapahtumiin, joita lukijan näppäilyt eivät laukaise odottamallasi tavalla
  • Syötemaski tai validointisäännöllinen lauseke hylkää luetussa sisällössä olevan kelvollisen merkin
  • ENTER/TAB-pääte laukaisee tahattoman toiminnon (lomakkeen ennenaikainen lähetys, modaalin sulkeminen, siirtyminen pois)
  • Luku tapahtuu nopeammin kuin viivästetty tai rajoitettu syötekäsittelijä ehtii rekisteröidä jokaisen näppäilyn

Diagnostiikan työnkulku

  1. Avaa näppäimistötapahtumien testaaja samassa selaimessa ja lue viivakoodi. Jos jokainen merkki kirjautuu tänne oikein, selain ja käyttöjärjestelmä vastaanottavat tapahtumat, joten virhe on sovelluksesi tapahtumien käsittelyssä.
  2. Tarkista, onko syötekenttäsi kohdistettuna juuri ennen lukua todellisessa työnkulussa (ei vain silloin, kun napsautat sitä käsin testausta varten).
  3. Avaa selaimen DevTools-konsoli ja etsi luvun aikana heitettyjä JavaScript-virheitä — käsittelijän keskellä heitetty virhe voi hiljaa pysäyttää myöhempien näppäilyjen käsittelyn.
  4. Poista tilapäisesti syötemaski, validointi tai viivelogiikka ja testaa uudelleen, jotta näet mikä kerros pudottaa syötteen.
  5. Tarkista, kuunteleeko sovelluksesi keypress-tapahtumaa (vanhentunut ja joidenkin näppäinten osalta epäluotettava) keydown/keyup-tapahtumien sijaan.

Miten korjataan

  • Varmista, että kohdekenttä kohdistetaan ohjelmallisesti aina, kun työnkulku odottaa lukua (esimerkiksi heti rivin lisäämisen jälkeen)
  • Korvaa keypress-kuuntelijat keydown/keyup-kuuntelijoilla, koska keypress on vanhentunut ja käsittelee joitakin näppäimiä epäjohdonmukaisesti
  • Käy läpi kaikki preventDefault()-kutsut näppäinkäsittelijöissä ja varmista, etteivät ne estä oikeutettuja merkkinäppäimiä
  • Löysennä syötemaskeja ja validointia niin, että ne hyväksyvät koko merkkialueen, jota viivakoodisymboliikkasi voivat tuottaa, ja validoi sitten koottu arvo yksittäisten näppäilyjen sijaan
  • Sovita lukijan pääte siihen, mitä lomakkeesi odottaa (katso ENTER- ja TAB-päätteet)

Aiheeseen liittyvät työkalut

Näppäimistötapahtumien testaaja · Viivakoodisyötteen testaaja