jQuery event.keyCode 0 при нажатии шведских клавиш å, ä и ö - PullRequest
1 голос
/ 05 октября 2010

У меня есть HTML-форма с множеством текстовых полей, все из которых занимают только один символ (подумайте кроссворд).Когда буква вводится в поле ввода, я использую jQuery, чтобы перейти к следующему.Это работает нормально, за исключением шведских символов åäö (возможно, затронуты и другие международные символы).

Я привязываю прослушиватель событий к событию keyup и использую event.keyCode и event.which, чтобы определить,нажатой клавишей была буква (если это была какая-то специальная клавиша, события проходят нетронутыми).

Проблема в том, что когда я нажимаю å, ä или ö, оба события event.keyCode и event.which равны 0. КогдаЯ проверяю объект события в Firebug, я не могу найти ни одного атрибута, который, кажется, содержит код ключа.

Код выглядит так:

    var crossword = $('article.crossword');

    crossword.bind('keyup', function(event) {
        var target = $(event.target, crossword);

        if (target.hasClass('crossword_letter_input')) {
            var pressedKey = event.which ? event.which : event.keyCode;
            var target_value = target.val();
            var target_tabindex;

            // Regular alphanumeric keys have keyCodes between 48 and 90.
            if (pressedKey >= 48 && pressedKey <= 90 && target_value.length) {
                target_tabindex = parseInt(target.attr('tabindex'));
                $('input.crossword_letter_input[tabindex=' + (target_tabindex + 1) + ']', crossword).focus();
            }
        }
    });

Я использую событие keyup вчтобы переместить фокус после ввода символа в текстовое поле.

Если вам известен какой-либо плагин jQuery или ванильный JS, который мог бы полностью заменить его, это также было бы решением.

РЕДАКТИРОВАТЬ: я сделал временное (и некрасивое) исправление, вставив следующее еще, если:

    // å, ä and ö reports keyCode 0 for some reason.
    else if (pressedKey === 0 && target_value.length) {
        target_tabindex = parseInt(target.attr('tabindex'));
        $('input.crossword_letter_input[tabindex=' + (target_tabindex + 1) + ']', crossword).focus();
    }

Таким образом, я просто предполагаю, что если event.which и event.keyCode были оба0, а длина значения в поле больше 0, фокус должен быть перемещен на следующий вход.Предположим, вещи без знания не чувствуют себя прекрасно ...

Ответы [ 3 ]

1 голос
/ 04 декабря 2010

Символы, которые вы часто упоминали, требуют двух нажатий клавиш. Это затрудняет обнаружение нажатия клавиш. Таким образом, вместо того, чтобы фокусироваться на нажатой клавише, как насчет побочного эффекта нажатия клавиши, непосредственно смотря на значение, которое находится в поле ввода?

$('input')
    .bind('keyup', function (e) {
        var t = $(this), // the current input element
            value = t.attr('value'),
            new_value = value.slice(-1); // last char only (if any)
        t.attr('value', new_value);
        t.select(); // highlight the text of current element 
                    // or jump to the next... whatever you want
    })
    // optional select on focus to make things consistent if you .select() above
    .bind('focus', function () { 
        $(this).select(); 
    });
1 голос
/ 06 декабря 2010

Код клавиши равен 0 для правой клавиши на клавиатуре.Когда вы вводите букву, которая требует использования этой клавиши Alt, вы получаете 0 из кода кета.Есть и другие ключи, которые также дают код == 0 (например, ключ windows на FF в linux)

Этот код (взят из примера jquery и немного изменен) создает то, что должно быть достаточно:

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.4.4.js"></script>
</head>
<body>

<input id="whichkey" value="type something">
<div id="log"></div>
<script>$('#whichkey').bind('keypress',function(e){ 
  $('#log').html(e.type + ': ' +  e.which );
});  </script>

</body></html>

при вводе он запускается для буквы alt + дважды - один раз с == 0, затем с == правильным кодом для буквы.

например,

Где я живу, alt + a производит ą и отправляет правильный код в событии после события с 0. Keydown был отправлен только один раз с кодом 0 в той же ситуации.

коды:

alt==0
a==97
ą=261
1 голос
/ 05 октября 2010

jQuery автоматически нормализует event.keyCode и event.which в event.which, поэтому вы можете что-то потерять, перенормировав на event.keyCode. Взгляните на пример на странице документации API jQuery для event.which , который покажет, какой код клавиши для введенных символов.

...