Скажем, у меня есть два поля ввода.
У меня есть фокус, затем я нажимаю на другое поле ввода.
Является ли гарантированным, что событие blur()
(первого элемента, потерявшего фокус) происходит до события focus()
(другой элемент получил фокус)?
Скажем, у меня есть два поля ввода.
У меня есть фокус, затем я нажимаю на другое поле ввода.
Является ли гарантированным, что событие blur()
(первого элемента, потерявшего фокус) происходит до события focus()
(другой элемент получил фокус)?
На 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.
Я бы сказал, да. В противном случае два элемента могли бы сфокусироваться одновременно, что никогда не должно быть возможным.