Использование плагинов jQuery с live () - PullRequest
4 голосов
/ 23 апреля 2011

У меня есть страница, которая динамически загружает контент с помощью функции 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 is undefined", либо "не задан аккордеон".

Ответы [ 2 ]

6 голосов
/ 23 апреля 2011

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

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

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

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

$(function(){
    $("#accordion").accordion();
});
2 голосов
/ 04 апреля 2012

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

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

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

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

...