Должны ли все события 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);
Теперь я прикрепляю все события так:
$(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/