jQuery: live () против делегата () - PullRequest
50 голосов
/ 17 ноября 2010

Я использую jQuery в своем веб-приложении. Читая его документацию, я прочитал о live() и delegate(). Хотя они объяснили оба метода, я не понимаю точную разницу между ними. Также не уверен, какой метод идеален для какого сценария.

Пожалуйста, помогите мне получить четкое представление об этих методах.

Спасибо

Ответы [ 4 ]

57 голосов
/ 17 ноября 2010

.live() требует немедленного запуска селектора, если только вы не используете результат, это очень расточительно.Здесь обработчик событий присоединен к document, поэтому все события этого типа из любых пузырьков элементов должны быть проверены.Вот пример использования:

$(".myClass").live("click", function() { alert("Hi"); });

Обратите внимание, что оператор $(".myClass") запустил этот селектор, чтобы найти все элементы с этим классом , даже если мы не заботимся о них , все мы хотел была строка ".myClass", чтобы соответствовать позже , когда click события всплывают до document.


.delegate() фактически использует .live() для внутреннего использования, но с контекстом.Селектор не запускается сразу, поэтому он уже более эффективен и не привязывается к document (хотя может), он гораздо более локальный ... и все эти прочее события из других деревьев элементов, о которых вы не заботитесь, никогда не проверяются, когда всплывают ... опять же, более эффективные.Вот пример использования:

$("#myTable").delegate("td", "click", function() { alert("Hi"); });

Что же здесь произошло?Мы запустили $("#myTable"), чтобы получить элемент для присоединения (по общему признанию, дороже, чем document, но мы используем результат. Затем мы прикрепляем обработчик событий к этому (или к другим в других случаях)элементы. Только clicks из в пределах этот элемент проверяется в селекторе "td", когда они происходят, а не из везде , как .live() делает (поскольку все находится внутри document).

6 голосов
/ 17 ноября 2010

делегат () отображается на live () в коде jQuery.Основное отличие состоит в том, что live () вызывается для элемента, для которого вы хотите делегировать события другому элементу. live () делегирует эти события объекту document .

делегат () , с другой стороны, позволяет вам указать, каким событиям элемента делегируются, передавая селектор.События, которые всплывают до этого элемента, обрабатываются, если исходный элемент соответствует селектору.

Как упомянул @NickCraver , делегат () работает лучше, чем в реальном времени, потому что он не обязательно захватывает события от каждого элемента на странице, изапросите селектор прямо сейчас.

3 голосов
/ 03 декабря 2011

Из документации jQuery:

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

http://api.jquery.com/live/

0 голосов
/ 15 декабря 2014

Живой метод:

$("#mymethod").live("click", function() { alert("It checks the entire DOM"); });

Метод Live проверяет #mymethod во всей DOM (иногда это зависит от вашего содержимого DOM)

Метод делегата:

$('.mycontainer').delegate('#mymethod','click',function() { alert('Checks only in mycontainer portion') });

Delagate не ищет всю вашу DOM, он ищет только в вашей части mycontainer. (Повышение производительности)

...