Первый пример демонстрирует делегирование события . Обработчик событий привязан к элементу выше по дереву DOM (в данном случаеdocument
) и будет выполняться, когда событие достигает этого элемента, возникшего на элементе, соответствующем селектору.
Это возможно, потому что большинство событий DOM всплывают по дереву из точки происхождения. Если вы щелкнете по #id
элементу, генерируется событие щелчка, которое всплывает через все элементы-предки ( примечание: на самом деле есть фаза перед этим, называемая «фазой захвата», когда событие спускается по дереву до цель ). Вы можете запечатлеть событие на любом из этих предков.
Второй пример связывает обработчик событий напрямую с элементом. Событие по-прежнему будет пузыриться (если вы не предотвратите это в обработчике), но поскольку обработчик привязан к цели, вы не увидите последствий этого процесса.
Делегируя обработчик событий, вы можете обеспечить его выполнение для элементов, которые не существовали в DOM на момент привязки. Если ваш #id
элемент был создан после вашего второго примера, ваш обработчик никогда не будет выполнен. Путем привязки к элементу, который, как вы знаете, определенно находится в DOM во время выполнения, вы гарантируете, что ваш обработчик действительно будет прикреплен к чему-либо и может быть выполнен позже соответствующим образом.