Ответ 1
На W3C проекта DOM3 События, спецификация говорит вам:
Заказ события фокуса
События фокусировки, определенные в этой спецификации, происходят в заданном порядке относительно друг друга. Ниже приведена типичная последовательность события, когда фокус смещается между элементами (этот порядок предполагает что ни один элемент изначально не сфокусирован):
> User shifts focus
> 1. focusin Sent before first target element receives focus
> 2. focus Sent after first target element receives focus
> User shifts focus
> 3. focusout Sent before first target element loses focus
> 4. focusin Sent before second target element receives focus
> 5. blur Sent after first target element loses focus
> 6. focus Sent after second target element receives focus
Обратите внимание, что утверждение, что не может быть двух элементов с фокусом, не совсем корректно; хотя я не знаю настольных сред, которые позволяют двум виджетам сфокусироваться одновременно, спецификация позволяет реализации решить, что:
Другие спецификации могут определять более сложную модель фокусировки, чем описано в этой спецификации, включая возможность использования нескольких элементов для текущего фокуса.
Также это стоит упомянуть:
Язык хоста может определить конкретные элементы, которые могут получать фокус, условия, при которых элемент может получать фокус, средства, с помощью которых основное внимание может и порядок изменения фокуса. (курсив мой).
Однако будьте осторожны, что Chrome не соответствует стандарту - вместо этого порядок blur, focusout, focus, focusin
. Вы можете проверить это, используя эту страницу. У браузеров Webkit может быть такая же проблема. focusin
и focusout
события поддерживаются так Firefox 52.