keypress и клавиша backspace в Firefox
Задача
Первичная проверка введённых символов в поле email адреса. По keypress проверяем - если нажата неразрешённая клавиша, останавливаем функцию (точнее отменяем действие по умолчанию), здесь ничего нового: $('#email').keypress(function(e){ if (!( e.which>=48 && e.which<=57 || e.which>=97 && e.which<=122 || e.which==45 || e.which==46 || e.which==64 || e.which==95) ){ return false; }; }); Почему keypress а не keydown Плюс keypress - работает с большим количеством символов, например "@", что актуально для поля email. Плюс keydown - работает с клавишами управления, такими как backspace и т.д. Проблема В браузере Firefox при такой проверке блокируется также и клавиша backspace (забой, код клавиши "8"), в результате чего набрать текст мы можем, а стереть нет. Мысли вслух Первая мысль - добавить backspace в список разрешённых клавиш, но ведь отловить её нажатие можно лишь событиями keydown/keyup! Вторая мысль - делать дополнительное условие для события keydown, которое будет следить за клавишей backspace. Проблема в том, что если вставить проверку события keydown внутрь keypress, оно (keydown) не будет обрабатываться, так как keydown срабатывает раньше чем keypress (который является неким гибридом keydown+keyup). Третья мысль - делать проверку события keydown паралельно и если нажата клавиша клавиша backspace, присваивать некой переменной значение "1" (в противном случае присваивать "0"), и значение этой переменной проверять в событии keypress. Это решение кажется слишком сложным и вообще это костыли, поэтому хорошо бы найти другой путь. Буду благодарен за Ваши мудрые мысли! |
mi.rafaylik,
а что мешает добавить проверку на 8 $('#email').keypress(function(e){ if(e.which != 8) { if (!( e.which>=48 && e.which<=57 || e.which>=97 && e.which<=122 || e.which==45 || e.which==46 || e.which==64 || e.which==95) ){ return false; }}; }); |
Спасибо, это действительно работает для Firefox, несмотря на то, что в данной таблице keypress не является обработчиком клавиши с кодом "8".
Устроил проверку, и она срабатывает только в Firefox, что и требовалось. Интересно почему у Firefox такое поведение, ведь используя jQuery хочется получать кроссбраузерный результат, но это не всегда так ) |
Часовой пояс GMT +3, время: 08:52. |