JQuery: как использовать «делегат» вместо «живой»? - PullRequest
2 голосов
/ 29 апреля 2010

Я прочитал множество статей о том, как использовать JQuery делегат гораздо эффективнее, чем использование "живого" события.

В связи с этим у меня возникли проблемы с преобразованием существующего кода Live в использование Delegate.

$("#tabs li:eq(0)").live('click',function(){ //...code });
$('#A > div.listing, #B > div.listing, #C > div.listing').live('mouseover',function(){ // ...code });

Когда я заменяю предыдущий код на более эффективный код делегата, моя страница не загружается.

$("#tabs li:eq(0)").delegate('click',function(){ //...code });
$('#A > div.listing, #B > div.listing, #C > div.listing').delegate('mouseover',function(){ // ...code });

Есть идеи, почему мой код делегата не работает? Кроме того, какие-либо предложения о том, как сделать это более эффективным?

UPDATE

Проблема в том, что и "#tabs", и "#A, #B, #C" отсутствуют на веб-странице при загрузке страницы. Эти атрибуты динамически вставляются на страницу с помощью вызова AJAX. Таким образом, означает ли это, что я должен использовать live over делегат?

1 Ответ

2 голосов
/ 29 апреля 2010

Обновление для вашего обновления:) - Да, придерживайтесь .live(), если это так, за исключением случаев, когда ваш DOM имеет очень глубину, существует бесконечно небольшая разница в производительности.


Предыдущий ответ: Функции вашего делегата должны выглядеть следующим образом:

$("#tabs").delegate('li:eq(0)', 'click', function(){ //...code });
$('#A, #B, #C').delegate('> div.listing', 'mouseover', function(){ // ...code });

Это зависит от того, отсутствует ли * 1014 в содержимом, заменяемом как частьлюбого вызова ajax, то же самое для #A, #B и #C.Формат для .delegate() следующий:

$(selectorOrNonReplacedParent).delegate(childSelector, event, function);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...