Как известно, недавно вышла бета версия jQuery 1.3. Пока она сырая, тестируется, и в ней еще есть неприятные баги. Но знакомится с нововведениями стоит и я хотел бы кратко рассказать об одном из них.
Функция «live» представляет собой аналог функции bind, по синтаксису и сути они идентичны, но между ними есть одно огромное различие, которое лучше всего демонcтрирует следующий пример.
Попробовать демо. Пояснения под катом.
В примере два набора кнопок, нажатие первых обрабатывается функцией назначенной через bind, вторых — через live.
При динамическом добавлении кнопок мы можем наблюдать основное отличие: в первом наборе новые кнопки не получают обработчика, во втором обработчик автоматически добавляется для каждой новой кнопки.
И хотя отличия в коде невелики:
по факту мы имеем огромную разницу.
PS: ранее подобный функционал можно было получить через этот плагин.
PPS: во время тестирования столкнулся с багом, который показывает насколько 1.3 еще сыра:
если указать сложный селектор $('#lblock input.lcmd').live(..., то обработчик не навесится вообще, причем, при замене на bind все работает прекрасно. Ждем исправлений в следующих версиях.
PPPS: а вот $('input.lcmd', $('#lblock')).live(… работает, что, в общем, не удивительно
Функция «live» представляет собой аналог функции bind, по синтаксису и сути они идентичны, но между ними есть одно огромное различие, которое лучше всего демонcтрирует следующий пример.
Попробовать демо. Пояснения под катом.
В примере два набора кнопок, нажатие первых обрабатывается функцией назначенной через bind, вторых — через live.
При динамическом добавлении кнопок мы можем наблюдать основное отличие: в первом наборе новые кнопки не получают обработчика, во втором обработчик автоматически добавляется для каждой новой кнопки.
И хотя отличия в коде невелики:
$("input.test").bind("click", function() {
alert("hello base input!");
});
$('input.lcmd').live("click", function() {
alert("hello live input!");
});
* This source code was highlighted with Source Code Highlighter.
по факту мы имеем огромную разницу.
PS: ранее подобный функционал можно было получить через этот плагин.
PPS: во время тестирования столкнулся с багом, который показывает насколько 1.3 еще сыра:
если указать сложный селектор $('#lblock input.lcmd').live(..., то обработчик не навесится вообще, причем, при замене на bind все работает прекрасно. Ждем исправлений в следующих версиях.
PPPS: а вот $('input.lcmd', $('#lblock')).live(… работает, что, в общем, не удивительно