Тема: Сканер QR коду. Проблема з вводом

Якщо сканувати QR код у звичайне input поле, код сканується правильно, але мені потрібно отримувати події onkeydown і оброблювати код під час сканування.

Не підійде взяти дані з input.value

Деякі сканери надсилають комбінацію клавіш, яка відкриває нову вкладку, тому мені приходиться скасовувати подію натискання клавіши e.preventDefault(); після її обробки.

Так ReadingQRHead функція підписана на подію onkeydown

inputField.onkeydown = ReadingQRHead;

В консолі виводжу подію натискання

function ReadingQRHead(e) {
        console.log("e.key = " + e.key + " | e.code = " + e.code + " | keyCode = " + e.keyCode);

Результат:

Сканую у input поле, з'являються такі значення (вони правильні)

BCD0011UCT  UA78...

Отримую подію натискання клавіш

23 e.key =   | e.code = Space | keyCode = 32
e.key = Shift | e.code = ShiftLeft | keyCode = 16
e.key = D | e.code = KeyD | keyCode = 68
e.key = 7 | e.code = Numpad7 | keyCode = 103
2 e.key =   | e.code = Space | keyCode = 32
e.key = 2 | e.code = Numpad2 | keyCode = 98
e.key = 0 | e.code = Numpad0 | keyCode = 96
e.key = 1 | e.code = Numpad1 | keyCode = 97
e.key = 9 | e.code = Numpad9 | keyCode = 105
e.key = , | e.code = Comma | keyCode = 188
e.key =   | e.code = Space | keyCode = 32
e.key = . | e.code = Period | keyCode = 190
2 e.key =   | e.code = Space | keyCode = 32
e.key = 1 | e.code = Numpad1 | keyCode = 97
e.key = , | e.code = Comma | keyCode = 188
e.key =   | e.code = Space | keyCode = 32
e.key = . | e.code = Period | keyCode = 190
e.key =   | e.code = Space | keyCode = 32
e.key = 2 | e.code = Numpad2 | keyCode = 98
e.key = 4 | e.code = Numpad4 | keyCode = 100
e.key = , | e.code = Comma | keyCode = 188
2 e.key =   | e.code = Space | keyCode = 32
2 e.key = . | e.code = Period | keyCode = 190
3 e.key =   | e.code = Space | keyCode = 32

Все що збігається це 23 пробіла.

В чому проблема ? Як отримати кожну клавішу яка була натиснута ? Або як заблокувати можливість відкриття нової вкладки комбінацією клавш (тоді можна буде брати значення з input.value) ?

2

Re: Сканер QR коду. Проблема з вводом

а воно вводить той код миттєво?

3

Re: Сканер QR коду. Проблема з вводом

FakiNyan написав:

а воно вводить той код миттєво?

На те щоб поле було заповнене витрачається десь одна секунда, можливо менше. Це виглядає так як неначе хтось швидко вводить з клавіатури.

Сканер працює по USB, за таким самим принципом як клавіатура. Сканер немає "стороннього" ПЗ звідки можна було б отримати дані, а посилає Скан Код

4

Re: Сканер QR коду. Проблема з вводом

Якщо воно вводить весь код за одну секунду, то чи не можна обробити його вже після того, як він введяний? навіщо вам обробляти його під час введення коду, якщо це відбувається відносно швидко?

Подякували: leofun011

5

Re: Сканер QR коду. Проблема з вводом

FakiNyan написав:

Якщо воно вводить весь код за одну секунду, то чи не можна обробити його вже після того, як він введяний? навіщо вам обробляти його під час введення коду, якщо це відбувається відносно швидко?

Деякі сканери надсилають комбінацію клавіш, яка відкриває нову вкладку, тому мені приходиться скасовувати подію натискання клавіши e.preventDefault(); після її обробки.

Якщо я не буду скасовувати подію, відкривається нова вкладка і туди йде ввід

6

Re: Сканер QR коду. Проблема з вводом

Betterthanyou написав:
FakiNyan написав:

Якщо воно вводить весь код за одну секунду, то чи не можна обробити його вже після того, як він введяний? навіщо вам обробляти його під час введення коду, якщо це відбувається відносно швидко?

Деякі сканери надсилають комбінацію клавіш, яка відкриває нову вкладку, тому мені приходиться скасовувати подію натискання клавіши e.preventDefault(); після її обробки.

Якщо я не буду скасовувати подію, відкривається нова вкладка і туди йде ввід

хм, хз тоді, якби мав такого сканера, то можна було б глянути, а так доведеться вгадувати, як то пофіксити, і чи можна взагалі

7

Re: Сканер QR коду. Проблема з вводом

function ReadingQRHead(e) {
        console.log(JSON.stringify(e));
}

please

8

Re: Сканер QR коду. Проблема з вводом

koala написав:
function ReadingQRHead(e) {
        console.log(JSON.stringify(e));
}

please

61 {"isTrusted":true}

9

Re: Сканер QR коду. Проблема з вводом

Тобто KeyboardEvent - це не звичайний object. Ок...
Що це за "зайві" цифри на початках рядків?
А що в e.detail прибігає? Ну і спробуйте e.charCode, e.keyCode і e.which подивитися - вони ніби застарілі, але біс його зна, як ті сканери працюють...

10

Re: Сканер QR коду. Проблема з вводом

Зробив.

e.detail постійно рівний 0

e.charCode теж = 0

e.keyCode я вже показував. (На початку теми keyCode)

А e.which дублює значення keyCode

Подякували: koala1

11

Re: Сканер QR коду. Проблема з вводом

На stackoverflow пишуть, що обробляти треба textInput, поле e.data.

Подякували: leofun01, Betterthanyou2

12 Востаннє редагувалося Betterthanyou (30.08.2020 16:06:20)

Re: Сканер QR коду. Проблема з вводом

Причина: Браузер не обробляє так швидко події натискання на клавіши як вони до нього приходять (я маю на увазі подію keydown). Почитав документацію до сканерів... рішення таке: Потрібно змінити Character delay з NotDelay на будь яку затримку між натисканням тоді всі символи будуть приходити в keydown подію.

Подякували: FakiNyan1