Показать сообщение отдельно
  #1 (permalink)  
Старый 20.09.2013, 10:34
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

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, 20.09.2013 в 11:58.
Ответить с цитированием