с focusout
обработчик событий
с обработчиком события щелчка Focusout проверяет правильность формата в поле ввода. Это достигается путем проверки входного значения на соответствие регулярному выражению. В случае неудачи он отображает сообщение ( div
постепенно появляется и исчезает через некоторое время) и перефокусирует мой ввод, вызывая
window.setTimout(function() { $(this).focus(); }, 10);
, поскольку я не могу перефокусироваться в событии focusout
обработчик. Событие focusout
также не может быть отменено. Просто к вашему сведению.
Click собирает данные из входных элементов и отправляет их с помощью Ajax.
Когда пользователь TABs проходит через форму, все в порядке. Когда определенное поле ввода не проходит проверку форматирования, оно перефокусируется сразу после того, как пользователь нажимает TAB .
Но когда пользователь не использует TAB , а вместо этого нажимает на каждое отдельное поле ввода, все работает нормально, пока они не нажмут кнопку
. focusout
срабатывает и устанавливает время ожидания для перефокусировки. Так как тайм-аут такой короткий, фокусировка происходит после этого, а затем возникает событие click
и выдает запрос Ajax.
Я реализовал проверку форматирования как независимый плагин jQuery, который я хочу сохранить сюда. Он использует . live ()
для прикрепления focusout
ко всем полям ввода с определенным атрибутом, в котором определено регулярное выражение формата.
Отправка данных также является универсальной, и я не хочу, чтобы она зависела от форматирования плагин. Они оба должны оставаться независимыми.
Как я могу предотвратить выполнение события щелчка, не делая эти два плагина зависимыми?
После некоторого поиска я увидел, что все основные браузеры поддерживают document.activeElement
, но я не могу заставить его работать в Chrome. FF и IE сообщают , что этот
является активным элементом, но Chrome всегда сообщает, что это BODY
, которое является активным, даже если щелчок
активирован на кнопке
] элемент
Проверьте этот код http: // jsfiddle. net / Anp4b / 1 / и нажмите кнопку. Протестируйте с помощью Chrome и другого браузера и посмотрите на разницу.