Задача
Первичная проверка введённых символов в поле 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. Это решение кажется слишком сложным и вообще это костыли, поэтому хорошо бы найти другой путь.
Буду благодарен за Ваши мудрые мысли!