Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.11.2011, 12:54
Новичок на форуме
Отправить личное сообщение для AntonYu Посмотреть профиль Найти все сообщения от AntonYu
 
Регистрация: 18.11.2011
Сообщений: 2

keydown + blur
Пример кода тут: http://jsfiddle.net/8Jfne/29/

Суть в следующем: есть набор инпутов. При перемещении по ним (с клавиатуры или мышью), при уходе с них, проверяется значение. Если не числовое, то ругаемся и возвращаемся к редактированию проблемного инпута.

В Chrome если ввести в инпут не числовое значение и нажать на Enter, то отрабатывает onkeydown - все хорошо. В FF и IE срабатывают оба обработчика, таким образом сообщение об ошибке появляется дважды (в FF у меня вообще трижды, 2 раза onblur отрабатывает).

Хотелось бы спросить, как выйти из такой ситуации?
Ответить с цитированием
  #2 (permalink)  
Старый 18.11.2011, 13:12
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Предлагаю только идею

Попробуй относительно новые события focusin и focusout, возможно они будут удобнее

Если от обработки интер избавиться неудасться, то возможно есть прикрутить к каждому полю аотрибут error, который будет хранить флаг ошибки.

1)Если поле начинает редактироваться, ставим error=false.
2) когда нажимаеться интер, обработчик проверяет что с полем error если false то он работает дальше, проверяет поле,
находит к примеру ошибку и устанавливает атрибут в true/
3) если срабатывает тут же событие потери фокуса. то это событие проверит атрибут error. Увидет что оно true, то есть ошибку в этом поле уже кто то обработал, а следовательно нечего делать не нужно.

то есть атрибут error будет предохранять, от срабатывания множества обработчиков. Кто первый сработал тот и установил флаг error, остальные рыпаться не будут так как флаг ошибки уже установлен.

хотя вместо флага ошибки уместнее флаг обработки. И первый обработчик будет устанавливать этот флаг всегда, чтобы остальные это поле не трогали.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 18.11.2011 в 13:42.
Ответить с цитированием
  #3 (permalink)  
Старый 18.11.2011, 13:16
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от AntonYu
как выйти из такой ситуации?
Я бы просто проверял поля при отправке формы, а не приставал каждый раз, на каждом поле...
Ответить с цитированием
  #4 (permalink)  
Старый 18.11.2011, 13:43
Новичок на форуме
Отправить личное сообщение для AntonYu Посмотреть профиль Найти все сообщения от AntonYu
 
Регистрация: 18.11.2011
Сообщений: 2

DjDiablo, focusin и focusout пробовал, мне не помогло, также отрабатывал kwydown+blur.


ksa, там форма наподобии Excel, проверять надо не отходя от кассы, сразу.


Проблема решилась тем, что проверку вынесли в onblur, в keydown убрали, так как onblur и так отработает при keydown.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
события focus и blur AdeL1ne jQuery 1 24.09.2011 09:26
KeyDown во время нативного Drag&Drop realus Events/DOM/Window 1 15.09.2011 17:14
особенности keydown в Firefox flyers555 jQuery 0 18.07.2011 19:43
blur для window.open jaffar Opera, Safari и др. 5 23.06.2011 10:16
ul li blur выволивть ;) Nightmare jQuery 4 09.12.2010 18:14