Использование плагинов jQuery с live()


У меня есть страница, которая динамически загружает содержимое с помощью функции jQuery load (), поэтому мне нужно использовать live () для каждой из моих функций jQuery на этой странице. Однако я не могу заставить live () работать с плагинами jQuery. Например, я хочу использовать аккордеон jQuery:

$("#accordion").accordion();
Но я не могу найти правильный синтаксис, чтобы заставить аккордеон работать с live (). Я пытался:
$("#accordion").live("load", accordion());
$("#accordion").live("load", $("#accordion").accordion());
$("#accordion").live("load", $(this).accordion());

Я либо получаю ошибку" b не определен", либо " аккордеон не определен."

2 4

2 ответа:

Вы должны использовать анонимную функцию

$("#accordion").live('load',function(){
    $(this).accordion();
});

Редактировать:

Если аккордеон уже находится на странице, когда вы его впервые визуализируете, то вы не должны вызывать его с помощью live (), а по загрузке страницы

$(function(){
    $("#accordion").accordion();
});

Это может частично ответить на ваш вопрос:

Я бы предложил вместо этого использовать livequery:

$("#accordion").livequery(
  function() { $(this).accordion(); }, 
  function() { $(this).accordion("destroy"); }
);

Первая функция инициализирует функциональность аккордеона jQuery UI на любом элементе $("#accordion"), добавленном в DOM, а вторая уничтожит объект аккордеона, когда этот же элемент будет удален из DOM.