keydown + blur
Пример кода тут: http://jsfiddle.net/8Jfne/29/
Суть в следующем: есть набор инпутов. При перемещении по ним (с клавиатуры или мышью), при уходе с них, проверяется значение. Если не числовое, то ругаемся и возвращаемся к редактированию проблемного инпута. В Chrome если ввести в инпут не числовое значение и нажать на Enter, то отрабатывает onkeydown - все хорошо. В FF и IE срабатывают оба обработчика, таким образом сообщение об ошибке появляется дважды (в FF у меня вообще трижды, 2 раза onblur отрабатывает). Хотелось бы спросить, как выйти из такой ситуации? |
Предлагаю только идею
Попробуй относительно новые события focusin и focusout, возможно они будут удобнее Если от обработки интер избавиться неудасться, то возможно есть прикрутить к каждому полю аотрибут error, который будет хранить флаг ошибки. 1)Если поле начинает редактироваться, ставим error=false. 2) когда нажимаеться интер, обработчик проверяет что с полем error если false то он работает дальше, проверяет поле, находит к примеру ошибку и устанавливает атрибут в true/ 3) если срабатывает тут же событие потери фокуса. то это событие проверит атрибут error. Увидет что оно true, то есть ошибку в этом поле уже кто то обработал, а следовательно нечего делать не нужно. то есть атрибут error будет предохранять, от срабатывания множества обработчиков. Кто первый сработал тот и установил флаг error, остальные рыпаться не будут так как флаг ошибки уже установлен. хотя вместо флага ошибки уместнее флаг обработки. И первый обработчик будет устанавливать этот флаг всегда, чтобы остальные это поле не трогали. |
Цитата:
|
DjDiablo, focusin и focusout пробовал, мне не помогло, также отрабатывал kwydown+blur.
ksa, там форма наподобии Excel, проверять надо не отходя от кассы, сразу. Проблема решилась тем, что проверку вынесли в onblur, в keydown убрали, так как onblur и так отработает при keydown. |
Часовой пояс GMT +3, время: 03:38. |