Проблема с DOM при щелчке, инициирующем событие фокусировки на другом входе

  1. У меня есть с focusout обработчик событий
  2. У меня есть с обработчиком события щелчка
  3. 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 и другого браузера и посмотрите на разницу.

6
задан Robert Koritnik 7 January 2011 в 18:56
поделиться