Связывать события на теле или документе? - программирование
Подтвердить что ты не робот

Связывать события на теле или документе?

иногда пользователи связывают события на $('body'), а иногда и на $(document)

$(document).on('click', someAction);

$('body').on('click', someAction);

Есть ли какая-то причина предпочесть друг другу?

4b9b3361

Ответ 1

Для меня существует главным образом одна причина для привязки событий на $(document), а не к $('body'):

не нужно ждать domReady (документ доступен до всего еще)

Ответ 2

Короткий ответ скорее всего, нет, не совсем.

Причина, по которой кто-то делает это, всегда должна заключаться в том, что он должен поймать событие по всему миру в своей разметке. Поскольку тег <body> должен следовать как прямой sibling на <html>, все фазы пузырьков событий закончится там.

<html>
    <body>
         <div>
         </div>

Каждое событие click на <div> будет сбрасываться до <body>, а также <html> (если не остановить вручную). Так что для этого usecase это не должно иметь никакого значения.

Ответ 3

Есть некоторая разница в скорости, не намного больше. Кто-то уже выполнил эту работу, поэтому я просто укажу вам ссылку.

http://jsperf.com/jquery-body-vs-document-body-selector

Однако в прямом отношении к вашему коду есть одно существенное различие. $(document).on('click', someAction); будет влиять в любом месте области просмотра документа, тогда как $('body').on('click', someAction); Не может влиять на столько же площади, сколько тело может иметь независимую высоту и ширину.