Javascript: как лучше всего читать ручной сканер штрих-кодов?
Я хотел бы иметь возможность сканировать штрих-коды с помощью ручного сканера и обрабатывать результаты с помощью Javascript.
Сканер штрих-кодов работает почти как клавиатура. Он выводит отсканированные / переведенные (штрих-код- > номер) данные raw (правильно?). На самом деле мне просто нужно поймать выход и продолжить. Но как это сделать?
Вот какой псевдокод я хотел бы сделать работой:
$(document).on("scanButtonDown", "document", function(e) {
// get scanned content
var scannedProductId = this.getScannedContent();
// get product
var product = getProductById(scannedProductId);
// add productname to list
$("#product_list").append("<li>" + product.name + "</li>");
});
- Есть идеи (фреймворки, Плагины, сниппеты)?
- любой сканер штрих-кодов (аппаратный) рекомендация?
Заранее спасибо!
я нашел это и это хорошие вопросы, но я хотел бы получить больше информации об обработке. Просто сфокусировать текстовую область может быть недостаточно в моем случае.
6 ответов:
Ваш псевдокод не будет работать, потому что у вас нет доступа к сканеру, чтобы поймать такие события, как
scanButtonDown. Ваш единственный вариант-это скрытый сканер, который ведет себя точно так же, как клавиатура. Чтобы отличить ввод сканера от ввода с клавиатуры, у вас есть два варианта: на основе таймера или префикса.Таймер на основе
Сканер, вероятно, вводит символы гораздо быстрее, чем пользователь может (разумно) с клавиатуры. Вычислите, как быстро принимаются нажатия клавиш и буферизуйте быстро ввод в переменную для передачи в вашу функцию
getProductsId. @Vitall написал многоразовое решение jQuery для перехвата ввода сканера штрих-кодов, вам просто нужно будет поймать событие onbarcodescanned.На основе префикса
Большинство сканеров можно настроить для префикса всех сканируемых данных. Вы можете использовать префикс, чтобы начать перехватывать все входные данные, и как только вы получите свой штрих-код, вы перестанете перехватывать входные данные.
полное раскрытие информации : я работаю консультантом в Socket Mobile, Inc. которые делают ручные сканеры.
После многих исследований и испытаний, что сработало лучше всего для меня, так это захват ввода со сканера штрих-кодов без фокусировки ввода формы. Слушайте события
keydownиtextInput.Событие
textInputдействует как событиеpaste. Затем он имеет все данные штрих-кода. В моем случае я ищу штрих-коды UPC.e.preventDefault()предотвращает вставку данных штрих-кода в форму ввода:Я протестировал это на Android 4.4 и 7.0 с помощью ИК-сканера CipherLab.document.addEventListener('textInput', function (e){ if(e.data.length >= 6){ console.log('IR scan textInput', e.data); e.preventDefault(); } });Пример прослушивания события
keydown. В моем случае я могу предположить, что до тех пор, пока ввод формы не сфокусирован, пользователь сканирует штрих-код.Конечно, вместо того, чтобы проверять длину строки для определения сканирования, вы можете прослушатьlet UPC = ''; document.addEventListener("keydown", function(e) { const textInput = e.key || String.fromCharCode(e.keyCode); const targetName = e.target.localName; let newUPC = ''; if (textInput && textInput.length === 1 && targetName !== 'input'){ newUPC = UPC+textInput; if (newUPC.length >= 6) { console.log('barcode scanned: ', newUPC); } } }e.keyCode === 13в прослушивателе событийkeydown.Не все ИК-сканеры запускают событие
textInput. Если ваше устройство этого не делает, то вы можете проверить, не испускает ли оно что-то подобное с:monitorEvents(document.body);Нашел этот трюк мониторинга здесь: Как вы регистрируете все события, вызванные элементом в jQuery?
Хорошо, вот как я это сделал. Я настроил сканер, чтобы добавить префикс (в моем случае, я использовал Ctrl+2 или ASCII-код 002 (контрольный код), чтобы он не мог легко быть введены с помощью клавиатуры), и ввести, (не стесняйтесь, чтобы изменить это, чтобы использовать что-то вроде сочетание клавиш Ctrl+3 или ASCII код 003 после каждого сканирования штрих-кода, если ваш штрих-код данных может содержать поступает). В jQuery я фиксирую событие нажатия клавиши и ищу префикс. Затем я записываю все в строку, а затем запускаю пользовательское событие, которое мое приложение может слушайте дальше. Поскольку я предотвращаю событие нажатия клавиши, пользователь может находиться в текстовом поле и сканировать штрих-код, который может вызвать событие, не затрагивая ничего из того, что он делает.
Кроме того, каждый штрих-код имеет 1-значный префикс, который мы используем для идентификации типа сканируемого штрих-кода. Примеры:
- E: Значок Сотрудника
- S: Значок Супервайзера
- I: Номер Изделия
let barcodeRead = ''; let readingBarcode = false; let handleKeyPress = (e) => { if (e.keyCode === 2) { // Start of barcode readingBarcode = true; e.preventDefault(); return; } if (readingBarcode) { e.preventDefault(); if (e.keyCode === 13) { // Enter readingBarcode = false; const evt = $.Event('barcodeScan'); evt.state = { type: barcodeRead.substr(0, 1), code: barcodeRead.substr(1), }; $(window).trigger(evt); barcodeRead = ''; return; } // Append the next key to the end of the list barcodeRead += e.key; } } $(window).bind('keypress', handleKeyPress);Благодаря этому префиксу я теперь могу определить тип штрих-кода и посмотреть, должен ли он быть обработанным на этой странице. Пример:
$(window).bind('barcodeScan', (e) => { if (e.state.type !== 'E') { alert('Please scan your employee badge only!'); } else { $('#employee-badge').val(e.state.code); } });
Сканер штрих-кодов работает почти как клавиатура.
Это зависит от модели. Все, что я использовал, работает точно так же, как клавиатура (по крайней мере, в том, что касается компьютера)
Он выводит отсканированные / переведенные (штрих-код- > номер) данные raw (правильно?).
Он выводит коды ключей.
$(document).on("scanButtonDown"Вы, вероятно, хотите
keypress, а неscanButtonDown.Посмотрите на объект события, чтобы определить" ключ", который был нажат.
К определите, когда весь код был отсканирован, вы можете получить ключ "конец данных" (возможно, пробел или возврат) или вам придется просто подсчитать, сколько символов вводится.
Я только начал работать над плагином, который обрабатывает сканирование штрих-кодов и сканирование кредитных карт (построен на jQuery):
Https://github.com/ericuldall/jquery-pos
Простая реализация:
$(function(){ $(document).pos(); $(document).on('scan.pos.barcode', function(event){ var barcode = event.code; //handle your code here.... }); });Пока этот плагин тестируется только с одним типом сканера и кодов, содержащих только цифры, но если у вас есть дополнительные требования, которые не работают с ним, я был бы рад адаптировать его к вашим потребностям. Пожалуйста, загляните на страницу github и дайте ей развернуться. Взносы поощряются.
E
var txt = ""; function selectBarcode() { if (txt != $("#focus").val()) { setTimeout('use_rfid()', 1000); txt = $("#focus").val(); } $("#focus").select(); setTimeout('selectBarcode()', 1000); } $(document).ready(function () { setTimeout(selectBarcode(),1000); });<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <input type="text" name="tag" id="focus" placeholder="Use handheld RFID scanner">
Comments