Должны ли все события jquery быть связаны с $ (document)?

Откуда это идет

Когда я впервые изучил jQuery, я обычно прикреплял такие события:

$('.my-widget a').click(function() {
    $(this).toggleClass('active');
});

Узнав больше о скорости селектора и делегировании событий, я прочитал в нескольких местах, чтоДелегирование событий jQuery сделает ваш код быстрее. " Итак, я начал писать код так:

$('.my-widget').on('click','a',function() {
    $(this).toggleClass('active');
});

Это был также рекомендуемый способ репликации поведения устаревшего .live () события. Что важно для меня, так как многие мои сайты все время динамически добавляют / удаляют виджеты. Выше неt ведет себя точно так же, как .live (), так как только элементы, добавленные в уже существующий контейнер.my-виджет получит поведение. Если я динамически добавлю еще один блок html после запуска этого кода, эти элементы не получат связанные с ними события. Как это:

setTimeout(function() {
    $('body').append('<a>Click does nothing</a>');
}, 1000);



Чего я хочу добиться:старое поведение .live () // означает присоединение событий к еще не существующим элементамПреимущества .on ()быстрая производительность для привязки событийПростой способ управления событиями

Теперь я прикрепляю все события так:

$(document).on('click.my-widget-namespace', '.my-widget a', function() {
    $(this).toggleClass('active');
});

Который, кажется, отвечает всем моим целям. (Да, это'почему-то в IE медленнее, не знаю почему?)Быстро, потому что к единственному элементу привязано только одно событие, а вторичный селектор оценивается только при возникновении события (пожалуйста, исправьте меня, если это не так). Пространство имен потрясающее, так как оно облегчает переключение прослушивателя событий.



Мое решение / вопрос

Так что я'Я начинаю думать, что события jQuery всегда должны быть привязаны к $ (документ).

Есть ли какая-то причина, по которой вы бы не хотели этого делать?

Может ли это считаться лучшей практикой? Если нет, то почему?

Если ты'прочитал все это, спасибо. Я ценю любые / все отзывы / идеи.

Предположения:

Использование jQuery, который поддерживает.on() // как минимум версия 1.7Вы хотите, чтобы событие было добавлено в динамически добавляемый контент

Показания / Примеры:

http://24ways.org/2011/your-jquery-now-with-less-suckhttp://brandonaaron.net/blog/2010/03/4/event-delegation-with-jqueryhttp://www.jasonbuckboyer.com/playground/speed/speed.htmlhttp://api.jquery.com/on/

Ответы на вопрос(2)

Ваш ответ на вопрос