Я только что закончил писать немного javascript, который определяет, использовался ли сканер штрих-кода для заполнения поля ввода, и перемещает фокус на следующее поле, если оно было.
Мой код отвечает на часть вашего вопроса: «Я хочу настроить слушатель jQuery для ввода со сканера, и я новичок в jQuery. Он должен прослушивать весь ввод с клавиатуры, но выполнять действие только тогда, когда слышит вводот сканера и только после завершения ввода со сканера. "
Вот HTML-код для полей ввода:
<input type="text" class="bcode" id="f1" onkeydown="typeSpeed(new Date().getTime());" onblur="typeSpeedReset();" onfocus="typeNextField('f2');" />
<input type="text" class="bcode" id="f2" onkeydown="typeSpeed(new Date().getTime());" onblur="typeSpeedReset();" onfocus="typeNextField('f3');" />
<input type="text" id="f3" />
У меня есть два поля с классом 'bcode', которые предназначеныдля ввода сканера штрих-кода (f1 и f2).Третье поле предназначено для обычного ввода (f3).Поля f1 и f2 отправляют (1) текущую метку времени при нажатии клавиши для функции 'typeSpeed' и (2) идентификатор следующего поля для выбора, когда поле получает фокус.Эти поля также инициируют вызов функции typeSpeedReset, когда поле теряет фокус.
Вот javascript / jQuery, который заставляет его работать:
$(function(){
var typingTimeout;
$('.bcode').keypress(function(e){
if (typingTimeout != undefined) clearTimeout(typingTimeout);
typingTimeout = setTimeout(isBarcode, 500);
});
});
var ts0 = 0, ts1 = 0, ts2, nf;
function typeSpeed(time) {
ts0 = (ts0 == 0) ? time : 0;
var ts3 = ts1;
ts1 = time - ts0;
ts2 = ts1 - ts3;
}
function typeSpeedReset() { ts0 = 0; ts1 = 0; }
function typeNextField(nextfield) { nf = nextfield; }
function isBarcode() {
if(ts2 < 20 && ts1 != 0) { $('#'+nf).focus(); }
}
Что происходит, это время между нажатиями клавишколичественно определяется функцией typeSpeed.В ходе экспериментов (потирая клавиатуру или удерживая клавишу) я обнаружил, что самый быстрый ввод данных человеком с задержкой между нажатиями клавиш составляет приблизительно ~ 33 мс.Сканер штрих-кода, который я использовал для тестирования с обычно производимыми задержками 10 мс или менее.
В поле установлен тайм-аут с классом 'bcode', чтобы определить моментальную остановку ввода.На этом этапе задержка оценивается.Если оно составляет менее 20 мс, предполагается, что использовался сканер штрих-кода, и фокусируется на следующем поле.
Проект, для которого был написан этот код, продвигается дальше, изменяя цвет фона поля иотображение небольшого графического изображения со штрих-кодом справа от поля, когда оно находится в фокусе, чтобы у пользователей было четкое представление о том, что оно реагирует и предназначено для ввода со сканера штрих-кода.