2013-10-08 3 views
0

У меня проблема с параметрами 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 = []; 
} 

ответ

1

Ваш вопрос не совсем ясно, и в любом случае у меня есть трудное время, полагая, что любой браузер будет получить код ASCII неправильно. Я настроил немного fiddle, чтобы проверить, что вы пытаетесь достичь. будем надеяться, что это поможет вам выяснить проблему.

Я использую

JSON.stringify 

, чтобы показать результаты в манере, которая, вероятно, более полезна.

+0

Это приводит к тому же вопросу. В текстовом поле все нормально, я получаю например «999123456789». С другой стороны, выход JSON.stringify (html) - 999123456789 \ r ((Обратите внимание на «(»). Проблема возникает из-за того, что получает мне 40 («(») вместо 10 (LF) в конец. \\ n/\\ r, определенные в информации, приводят к правильным значениям (10 13) –

+0

Мне не хватает точки где-то. См. измененную [скрипку] (http://jsfiddle.net/Dm9NE/2 /) .Какой частью этого поведения является неправильная? В Chrome 30 на Windows я печатаю abcde, а затем CR, чтобы получить 'c65c66c67c68c69c13', который выглядит прямо на меня. – DroidOS

+0

Я тоже на Chrome 30 (Win). CR не является Проблема: это LF, поэтому я получаю из сканера вывод «999123456789 \ r \ n». В обновленной скрипте я получаю «999123456789» в текстовом поле. В строке я получаю «c57c57c57c49c50c51c52c53c54c55c56c57c13c40», который должен быть «c13c10» на конец. –

Смежные вопросы