У меня проблема с параметрами keydown jQuery. Я использую сканер штрих-кода, который отправляет строку 12char и CR LF в конце. Поэтому я ожидал бы код ASCII 13 для последнего вызова keydown. . То, что я получаю это дополнительные 40 -> 13 40 (CR «(») В других приложениях, например Notepad ++/C приложений # консоли и т.д. ЧР признается последний символ Вот пример кода:jQuery keydown CRLF
var keys = [];
$(document).keydown(function (e) {
keys.push(String.fromCharCode(e.which));
});
$(document).keyup(function() {
if(keys.length == 14)
{
handleCode();
}
});
function handleCode() {
var div = document.getElementById('out');
var html = '';
var numberOfKeys = keys.length;
//Last 2 keys == CR "("
for (var i=0; i < (numberOfKeys);i++) {
html += keys[i];
}
div.innerHTML = html;
keys = [];
}
.
ли кто-либо представление о том, почему есть дополнительный «(» (код ASCII 40) в конце
Edit: я выяснил следующее поведение для выхода сканера из «12345CR»:
Event on TextBox:
KeyDown: 49 50 51 52 53 13 ('12345CR')
KeyPress: 49 50 51 52 53 13 ('12345CR')
KeyUp: 49 50 51 52 53 13 40 ('12345CR(')
Event on Document:
KeyDown: 49 50 51 52 53 13 40 ('12345CR(')
KeyPress: 49 50 51 52 53 13 ('12345CR')
KeyUp: 49 50 51 52 53 13 40 ('12345CR(')
Я заканчиваю используя KeyPress, который отлично работает, когда он подключен (я думал, что он работает только с текстовыми полями). Но я до сих пор удивляюсь, где 40 («(») происходят из
Вот обновленный код, который отлично работает в настоящее время:.
var keys = [];
var startTime;
$(document).keypress(function (e) {
keys.push(String.fromCharCode(e.which));
if(keys.length == 13)
{
handleCode();
}
});
function handleCode() {
var div = document.getElementById('out');
var html = '';
var numberOfKeys = keys.length;
for (var i=0; i < (numberOfKeys);i++) {
html += keys[i];
}
div.innerHTML = html;
keys = [];
}
Это приводит к тому же вопросу. В текстовом поле все нормально, я получаю например «999123456789». С другой стороны, выход JSON.stringify (html) - 999123456789 \ r ((Обратите внимание на «(»). Проблема возникает из-за того, что получает мне 40 («(») вместо 10 (LF) в конец. \\ n/\\ r, определенные в информации, приводят к правильным значениям (10 13) –
Мне не хватает точки где-то. См. измененную [скрипку] (http://jsfiddle.net/Dm9NE/2 /) .Какой частью этого поведения является неправильная? В Chrome 30 на Windows я печатаю abcde, а затем CR, чтобы получить 'c65c66c67c68c69c13', который выглядит прямо на меня. – DroidOS
Я тоже на Chrome 30 (Win). CR не является Проблема: это LF, поэтому я получаю из сканера вывод «999123456789 \ r \ n». В обновленной скрипте я получаю «999123456789» в текстовом поле. В строке я получаю «c57c57c57c49c50c51c52c53c54c55c56c57c13c40», который должен быть «c13c10» на конец. –