Ограничение ввода указанным регулярным выражением в верхнем регистре в IE - PullRequest
1 голос
/ 06 апреля 2010

Я пытаюсь ограничить то, что наши пользователи смогут вводить во входных данных, используя javascript / jquery.

Проблема в том, что я должен ограничить это только заглавными буквами и числами.

Вот что я кодировал ранее:

$(input).keypress(function(e){
                    if ($(input).attr("class")=="populationReference"){
                        var ValidPattern = /^[A-Z_0-9]*$/;
                        var char = String.fromCharCode(e.charCode);
                        if (!ValidPattern.test(char) && e.charCode!=0){
                            return false;
                            e.preventDefault();
                        }
                    }
                });

Если Firefox поддерживает charCode, то IE нет. Как тогда я могу проверить, печатает ли пользователь прописными или строчными буквами? Спасибо за любую помощь!

Ответы [ 3 ]

2 голосов
/ 06 апреля 2010

Вместо этого используйте событие keypress(). В IE все keydown и keyup указывают, какой код клавиши клавиатуры был нажат - он не учитывает управляющие клавиши и соответственно изменяет код клавиши. Событие keypress указывает, какой код символа был набран. Имейте в виду, что он не будет работать для определенных системных ключей:

Начиная с Microsoft Internet Explorer 4.0, событие onkeypress запускается и может быть отменено для следующих ключей:
  • Буквы: A - Z (прописные и строчные)
  • Цифры: 0 - 9
  • Символы:! @ # $% ^ & * () _ - + = Система: ESC, ПРОБЕЛ, ВВОД

После редактирования - вам нужно использовать e.which вместо e.charCode.

1 голос
/ 06 апреля 2010

Из руководства по jquery для keypress():

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

Другими словами, если вы используете jquery, вы можете безопасно использовать e.which для возврата кода символа, поэтому в вашем случае:

var char = String.fromCharCode(e.which);

- это изменение, которое нужно сделать.

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

$("input.populationReference").keypress(function(e){
                        var ValidPattern = /^[A-Z_a-z_0-9]*$/;
                        var char = String.fromCharCode(e.charCode);
                        if (!ValidPattern.test(char) && e.charCode!=0){
                            return false;
                            e.preventDefault();
                        } else {
                          var inputval = $(this).value(); 
                          $(this).value(inputval.toUpperCase());
                        }
                });
1 голос
/ 06 апреля 2010

Используйте e.which вместо e.charCode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...