Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   keydown + blur (https://javascript.ru/forum/jquery/23267-keydown-blur.html)

AntonYu 18.11.2011 12:54

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

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

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

Хотелось бы спросить, как выйти из такой ситуации?

DjDiablo 18.11.2011 13:12

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

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

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

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

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

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

ksa 18.11.2011 13:16

Цитата:

Сообщение от AntonYu
как выйти из такой ситуации?

Я бы просто проверял поля при отправке формы, а не приставал каждый раз, на каждом поле...

AntonYu 18.11.2011 13:43

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


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


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


Часовой пояс GMT +3, время: 07:34.