Barcode Scanner Emulator
स्कैनर Notepad में चलता है लेकिन POS में नहीं
यह सबसे अधिक रिपोर्ट की गई बारकोड समस्याओं में से एक है, और लगभग हमेशा मतलब है कि स्कैनर और कनेक्शन ठीक हैं — बग इस बात में है कि आपका एप्लिकेशन कीबोर्ड इनपुट कैसे संभालता है।
समस्या
सादे टेक्स्ट एडिटर में स्कैन हर बार सही मान देता है, लेकिन आपके POS सिस्टम, वेब ऐप या आंतरिक टूल में स्कैन कुछ नहीं, आंशिक इनपुट, या गलत व्यवहार देता है।
संभावित कारण
- स्कैन के समय लक्ष्य फ़ील्ड के पास कीबोर्ड फ़ोकस नहीं है, या फ़ोकस ऐसे एलिमेंट पर है जो इनपुट नहीं
keydownहैंडलरpreventDefault()को ऐसे तरीके से कॉल करता है जो अक्षर एंट्री रोक देता है- ऐप
pasteयाinputइवेंट पर निर्भर है, जिन्हें स्कैनर कीस्ट्रोक आपकी अपेक्षा के अनुसार स्वाभाविक रूप से ट्रिगर नहीं करते - इनपुट मास्क या सत्यापन रेगेक्स स्कैन किए पेलोड में मान्य अक्षर को अस्वीकार करता है
- ENTER/TAB प्रत्यय अनचाही क्रिया चलाता है (फ़ॉर्म जल्दी सबमिट, मोडल बंद, कहीं और नेविगेट)
- स्कैन इतना तेज़ है कि डिबाउंस या थ्रॉटल किया इनपुट हैंडलर हर कीस्ट्रोक दर्ज नहीं कर पाता
निदान वर्कफ़्लो
- उसी ब्राउज़र में कीबोर्ड इवेंट टेस्टर खोलें और बारकोड स्कैन करें। अगर यहाँ हर अक्षर सही लॉग होता है, ब्राउज़र और ऑपरेटिंग सिस्टम इवेंट ठीक पा रहे हैं, इसलिए बग आपके ऐप की इवेंट हैंडलिंग में है।
- जाँचें कि वास्तविक वर्कफ़्लो में स्कैन से ठीक पहले आपका इनपुट फ़ील्ड फ़ोकस में है (केवल तब नहीं जब आप परीक्षण के लिए मैन्युअल क्लिक करें)।
- ब्राउज़र का DevTools कंसोल खोलें और स्कैन के दौरान फेंकी JavaScript त्रुटियाँ देखें — हैंडलर के बीच में फेंकी त्रुटि आगे के कीस्ट्रोक की प्रोसेसिंग चुपचाप रोक सकती है।
- इनपुट मास्क, सत्यापन या डिबाउंस लॉजिक अस्थायी रूप से हटाएँ और दोबारा परखें ताकि यह अलग हो कि कौन-सी परत इनपुट गिरा रही है।
- जाँचें कि आपका ऐप
keydown/keyupके बजायkeypressसुनता है या नहीं (keypressअप्रचलित है और कुछ कुंजियों के लिए अविश्वसनीय)।
कैसे ठीक करें
- सुनिश्चित करें कि जब भी वर्कफ़्लो स्कैन की अपेक्षा करे, लक्ष्य फ़ील्ड प्रोग्रामेटिक रूप से फ़ोकस हो (उदाहरण: लाइन आइटम जोड़ने के तुरंत बाद)
keypressलिसनर कोkeydown/keyupसे बदलें, क्योंकिkeypressअप्रचलित है और कुछ कुंजियाँ असंगत संभालता है- कीबोर्ड हैंडलर में
preventDefault()कॉल की जाँच करें ताकि वे वैध अक्षर कुंजियाँ न रोकें - इनपुट मास्क और सत्यापन ढीले करें ताकि वे आपकी बारकोड सिम्बोलॉजी द्वारा बन सकने वाली पूरी अक्षर-श्रेणी स्वीकार करें, फिर अलग-अलग कीस्ट्रोक के बजाय जुड़ा हुआ मान सत्यापित करें
- स्कैनर का प्रत्यय उस चीज़ से मिलाएँ जिसकी आपके फ़ॉर्म को अपेक्षा है (देखें ENTER बनाम TAB प्रत्यय)