Вкратце: .bind()
будет применяться только к элементам, которые вы в данный момент выбрали в своем объекте jQuery. .live()
будет применяться ко всем текущим соответствующим элементам, а также ко всем, которые вы можете добавить в будущем.
Основное различие между ними заключается в том, что live()
использует всплывающее сообщение . То есть, когда вы нажимаете кнопку, эта кнопка может существовать в <p>
, в <div>
, в <body>
элементе; таким образом, вы фактически нажимаете на все эти элементы одновременно.
live()
работает, подключая ваш обработчик событий к документу , а не к элементу . При нажатии на эту кнопку, как показано выше, документ получает такое же событие щелчка. Затем он просматривает строку элементов, на которые нацелено событие, и проверяет, соответствует ли какой-либо из них вашему запросу.
Результат этого двоякий: во-первых, это означает, что вам не нужно продолжать повторно применять события к новым элементам, так как они будут добавлены неявно, когда событие произойдет. Однако, что более важно (в зависимости от вашей ситуации), это означает, что ваш код намного легче! Если у вас есть 50 <img>
тегов на странице, и вы запускаете этот код:
$('img').click(function() { /* doSomething */ });
... тогда эта функция копируется в каждый из этих элементов. Однако, если у вас был этот код:
$('img').live('click', function() { /* doSomething */ });
... тогда эта функция хранится только в одном месте (в документе) и применяется ко всему, что соответствует вашему запросу во время события.
Однако из-за этого пузырящего поведения не все события могут быть обработаны таким образом. Как отметил Ичибан, этими поддерживаемыми событиями являются щелчок, dblclick mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup.