Код клавиши JavaScript = / = charcode

Я привязываю keydown событие с jQuery для разрешения некоторых определенных символов в текстовом поле. Я пытаюсь сделать свой перекрестный браузер кода и платформу совместимыми. Мой основной вопрос - то, что я не могу найти, что способ отобразить полученный код клавиши на действительный символьный код, специально для кода клавиши, прибывающего из цифровой клавиатуры (десятичный разделитель, это запятая или период, и т.д.).

6
задан Brian Tompsett - 汤莱恩 23 September 2019 в 20:19
поделиться

3 ответа

Ну, как я сказал в комментариях, цель этого вопроса заключалась в том, чтобы отфильтровать текстовое поле по числовым значениям. Мне удалось достичь своей цели с помощью события нажатия клавиши.

Я опубликовал плагин jQuery для тех, кто заинтересован в решении.

1
ответ дан 16 December 2019 в 21:41
поделиться

Верно. Вы не можете сделать такого отображения; нажатие клавиши может даже не соответствовать вставляемому символу. Или Caps Lock может изменить значение нажатия клавиш, и вы не можете нюхать это. И различные другие морщины .

Если вы хотите узнать код символа, ваш единственный вариант - использовать событие нажатие клавиши .

6
ответ дан 16 December 2019 в 21:41
поделиться

Что ж, если ваша проблема заключается в преобразовании кодов клавиш в символы, почему бы не позволить браузеру сделать это за вас? Это может показаться отвратительным, но вы можете просто разрешить браузеру изменять текстовое поле (так что удаление - это удаление, а точка - это точка), а затем вернуться и отредактировать его ... Гм ... может быть, что-то вроде этого :

function hookEvents() {
    $('#myTextBox').oldValue = $('#myTextBox').value;
    $('#myTextBox').bind('keyup', function(event) {
        // Maybe nothing's changed?
        if (event.target.oldValue == event.target.value) {
            return;
        }

        var validInput = /(\-?[0-9]*(?:\.[0-9]*)?)/;
        var input = event.target.value;
        var result = validInput.exec(input);
        if (result.index != 0 || result[result.length-1] != input.length) 
        {
            event.target.value = result[0];
        }

        // update for later
        event.target.oldValue = event.target.value;
    });
}

Самая большая проблема с этим подходом заключается в том, что каждая нажатая клавиша на мгновение появляется на экране. С другой стороны, с REGEX у вас гораздо больше контроля над форматом разрешенного ввода. В приведенном выше примере я разрешаю только положительные или отрицательные числа (с необязательной десятичной точкой). Например: «123», «-123», «-123,456», «123,456».

Я знаю, что это не совсем ответ на ваш вопрос, но это полностью обходит проблему!

1
ответ дан 16 December 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: