Ответ 1
Для меня существует главным образом одна причина для привязки событий на $(document)
, а не к $('body')
:
не нужно ждать domReady (документ доступен до всего еще)
иногда пользователи связывают события на $('body')
, а иногда и на $(document)
$(document).on('click', someAction);
$('body').on('click', someAction);
Есть ли какая-то причина предпочесть друг другу?
Для меня существует главным образом одна причина для привязки событий на $(document)
, а не к $('body')
:
не нужно ждать domReady (документ доступен до всего еще)
Короткий ответ скорее всего, нет, не совсем.
Причина, по которой кто-то делает это, всегда должна заключаться в том, что он должен поймать событие по всему миру в своей разметке. Поскольку тег <body>
должен следовать как прямой sibling на <html>
, все фазы пузырьков событий закончится там.
<html>
<body>
<div>
</div>
Каждое событие click на <div>
будет сбрасываться до <body>
, а также <html>
(если не остановить вручную). Так что для этого usecase это не должно иметь никакого значения.
Есть некоторая разница в скорости, не намного больше. Кто-то уже выполнил эту работу, поэтому я просто укажу вам ссылку.
Однако в прямом отношении к вашему коду есть одно существенное различие. $(document).on('click', someAction);
будет влиять в любом месте области просмотра документа, тогда как $('body').on('click', someAction);
Не может влиять на столько же площади, сколько тело может иметь независимую высоту и ширину.