2011-01-18 4 views
2

Недавно я использовал .delegate и .live много. У них есть тонкая разница, когда дело доходит до захвата события, я думаю. При использовании прямых ссылок для ссылок, таких как $ ('a'). Live («click», ..., ссылки, у которых было изображение в виде содержимого html, оказались обработчиком кликов, получающим цель как изображение вместо ссылка. в то время как с делегацией, кажется, что это связь, которая передается в качестве мишени.Когда jquery.delegate вызывает обработчик событий?

что такое подвох?

Кроме того, когда именно это обработчик щелчка призвал .delegate, в то время как фаза захвата или фаза барботирования?

ответ

2

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

Например

$('a').live('click', function() { 
}); 

создаст обработчик события к вашему document.body. Это полностью уничтожит все anchors -clicks, которые появляются на вашем сайте.

$('#someDiv').delegate('a', 'click', function() { 
}); 

только "смотреть" все якоря, ChildNodes от #someDiv.

Вряд ли делегированное событие на .live() имеет другую цель. Оба .live() и .delegate() передают объект события в обработчик. Это не должно иметь никакого значения, event.target всегда должен быть узлом вызова.

Ref .: .live(), .delegate()

Смежные вопросы