2013-02-25 2 views
2

программы! Я нашел решения для подобных проблем, таких как мои здесь, на сайте, но то, что происходит со мной, довольно необычно, и я не думаю, что они применяются.Как отменить выполнение javascript после события click?

На этой странице: http://tdg.gswitchhost.com/calendar/

Я заперта в использовании этого плагина, который я действительно не заботиться. Это сайт Wordpress, но плагин, в котором перечислены предстоящие события, не ведет себя как Wordpress. У этого есть эта система, которая полностью уникальна для него. Сообщения живут вне таблицы базы данных сообщений, и вы должны запрашивать их совершенно по-другому. Это облом. Итак, моя проблема:

У нас есть jquery, работающий с магией в списке событий, чтобы добавить эффект аккордеона, и это работает. Однако. Когда вы нажимаете на ссылки для разбивки на страницы, чтобы загрузить следующий набор событий, плагин вместо ссылки на страницу 2 событий выполняет асинхронный запрос и загружает следующий набор событий на существующую страницу без перезагрузки страницы. Если вы нажмете на одно из новых событий, аккордеон больше не работает.

Что я думаю происходит, что по щелчку, плагин удаляет всю UL, который содержит события и загружает второй совершенно новый, содержащий второй набор записей, с тем же именем класса, но с JavaScript инициализируется на первом UL, тот, который был удален плагин, новый набор не был затронут, так как страница не перезагрузилась и снова запустила javascript.

Я попытался использовать .on() и плагин Livequery для повторного запуска javascript при нажатии ссылок на страницы, но при запуске запроса и загрузке нового UL есть задержка, поэтому я считаю, что javascript снова запускается, когда вы нажимаете на ссылку, но поскольку UL не был загружен уже, когда вы нажимаете, для jquery нечего работать.

Извините, что так долго, но я просто хочу быть как можно более ясным. Я ошибаюсь? Это убивает меня, у меня заканчивается время, и мне действительно нужно заставить это работать, чтобы независимо от того, какой набор событий был загружен на странице, на нем работает функция аккордеона.

Вот Javascript, который инициализирует гармошку:

$('.eventListingNew').accordion({ 
    headerClassName: 'accordionHeader', 
    headerActiveClassName: 'accordionHeader-active', 
    contentClassName: 'accordionContent', 
    collapseAll: false, 
    speed: 250 
}); 

А вот Pastebin целой функции аккордеона, так как это так долго. http://pastebin.com/BvDseg3g

+0

Can Kinda сказать, что вы немного расстроены! Правильно, подведите итог в предложении, что вы хотите, чтобы мы работали? Вы хотите отложить выполнение в течение определенного времени. Вот что подразумевает название вопроса. – christopher

+0

Извините, что это было так много времени, и если это неясно, задержка на выполнение - это переменная, поэтому я не могу жестко установить задержку, например .delay (300). Я ДУМАЮ, что я ищу, это способ для javascript обнаруживать, когда загружается новый UL, и THEN запускают функцию аккордеона. Можете ли вы это сделать? –

+0

ответ epascarello имеет больше смысла :) – christopher

ответ

2

Простая вещь - просто вызвать ее, когда завершение Ajax завершено, чтобы повторно инициализировать его.

$(document).ajaxComplete(function(event, xhr, settings) { 

    $('.eventListingNew').accordion({ 
     headerClassName: 'accordionHeader', 
     headerActiveClassName: 'accordionHeader-active', 
     contentClassName: 'accordionContent', 
     collapseAll: false, 
     speed: 250 
    }); 

}); 
+0

Это сработало. Я никогда не слышал о ajaxComplete() до сегодняшнего дня. Спасибо за вашу помощь. –

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