.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
).
В дополнение к ответу ниже читатели могут захотеть взглянуть на это * невероятно хорошо * [статья] (http: /www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/), объясняя разницу между 'bind',' live' и 'delegate'. – Jon
Краткое описание: [JQuery - live vs delegate] (http://www.timacheson.com/Blog/2011/oct/jquery_live_vs_delegate). – Tim