Задать вопрос

Какая разница между jQuery .bind() .live() .delegate() и .on()?

Довольно много путаницы у разработчиков в том, какие принципиальные различия между методами jQuery .bind() .live() .delegate() и .on(), и когда какой должен быть использован.



Можете подробно рассказать?
  • Вопрос задан
  • 50089 просмотров
Подписаться 51 Оценить 1 комментарий
Решения вопроса 1
zimorodok
@zimorodok
bind — навешивает обработчик непосредственно на элемент (когда тот есть в DOM-е). При удалении элемента так-же удаляется.

live — навешивает обработчик на document, используется делегирование (всплытие событий). Позволяет создать обработчик до того, как элемент появится в DOM-е. При удалении элумента обработчик не удаляется, а просто перестает срабатывать. Если в DOM снова вставить элемент, подходящий под селектор, обработчик снова отработает.

delegate — точно так-же, как и live, использует делегирование, только явно указывается узел, на который навешивается обработчик. (удобно для разработки модулей, или как их еще называют, виджетов)

on — объединяет возможности как bind, так и delegate (зависит от формы использования). Как верно было замечено, остальные методы deprecated и в новых версиях поддерживаться не будут. Елиный метод введен для того, чтобы не возникали вопросы какой метод использовать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Сейчас стоит использовать только .on — все остальное будет потихоньку переходить в deprecated.
Отличие .bind от всех остальных в том, что он слушает события напрямую на элементе, тогда как все остальные подразумевают перехват и обработку всплывающих по DOM-дереву событий (т.н. «делегирование событий»).
Ответ написан
@theaspin
Внимательно читаем документацию: с версии 1.7 рекомендуется использовать только on(). Остальные методы — обертки для on() с разными параметрами.
Ответ написан
Комментировать
Methos
@Methos
Ответ написан
Комментировать
ilyaplot
@ilyaplot
PHP программист
Live можно сразу забыть, т.к. он находится в категории deprecated.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы