Для многих типов событий можно использовать делегирование событий, при котором один захватывает событие в каком-то содержащем элементе, когда он всплывает в иерархии документа, а затем устанавливает элемент, из которого произошло событие. К сожалению, focus
, blur
и
change
события не всплывают.
Однако в реализациях DOM, которые реализуют стандартную модель событий DOM, вместо этого можно использовать фазу захвата, которая перехватывает событие на пути к элементу, в котором оно будет запущено.
Это не работает (сюрприз, сюрприз) в Internet Explorer (IE), который до сих пор не имеет реализации стандартной модели событий, даже в IE8. Однако в IE есть свои события focusin
и focusout
, которые делают пузырь.
Конечным результатом является то, что, как обычно, нужно написать свой код, чтобы иметь дело с тем, как работают правильные браузеры, а также с тем, как работает IE.
К счастью, это один из тех случаев, когда ppk (он же Peter-Paul Koch) из quirksmode.org уже проделал тяжелую работу: его статья Делегирование событий фокуса и размытия должен рассказать вам все, что вам нужно знать, а также дать краткое объяснение того, как работает делегирование событий.