Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 20.09.2013, 11:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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;
	}};
});
Ответить с цитированием
  #3 (permalink)  
Старый 20.09.2013, 11:37
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

Спасибо, это действительно работает для Firefox, несмотря на то, что в данной таблице keypress не является обработчиком клавиши с кодом "8".
Устроил проверку, и она срабатывает только в Firefox, что и требовалось.
Интересно почему у Firefox такое поведение, ведь используя jQuery хочется получать кроссбраузерный результат, но это не всегда так )

Последний раз редактировалось mi.rafaylik, 20.09.2013 в 16:11.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
history рассширение для браузеров не поддерживающих pushState, replaceState devote Ваши сайты и скрипты 187 13.08.2015 10:40
Расширение для Firefox decadent Firefox/Mozilla 1 12.05.2011 11:16
Разработка дополнений для Mozilla FireFox и ThunderBird RUVATA Общие вопросы Javascript 0 08.02.2011 15:50
Beautifier JavaScript для Firefox Kolyaj Firefox/Mozilla 2 03.03.2010 12:59
Написание плагина для Firefox SunnyDay Общие вопросы Javascript 2 02.12.2008 15:21