При використанні бібліотеки FullAjax можна зіткнутись з тим, що інші скрипти (наприклад LightBox) відмовляються працювати, або працюють не коректно. Причина з якої вони відмовляються працювати дуже проста – вони не зовсім розраховані на сумісну роботу з AJAX.

Як це можна поправити, опишу в декількох рядках нижче…

Основна причина (але не єдина) по якій деякі скрипти відмовляються працювати сумісно з AJAX – це те, що вони не “бачать” коли AJAX сторінка завантажена та готова до “використання”. Щоб це поправити потрібно самостійно їм вказувати, що сторінка “готова”.

Для цього, після завантаження AJAX сторінки потрібно повідомити скриптам, що сторінку оновлено.
Щоб визначити коли сторінка готова, можна скористатись подією “load” бібліотеки FullAJAX (приклад для Mootools fireEvent()):

FLAX.Html.onall('load', function(options){
	window.fireEvent('domready');
});

або функцією зворотного виклику:

function doSomethingAfterFAjxPagLoad (){
	window.fireEvent('domready');
};

Щоб ця функція спрацювала після завантаження AJAX сторінки, в базові налаштування бібліотеки FullAjax потрібно додати параметр onload:doSomethingAfterFAjxPagLoad .
Приклад :

FLAX.Filter.add({url:'/', id:fullAjaxId, onload:doSomethingAfterFAjxPagLoad}); 
...
function doSomethingAfterFAjxPagLoad (){
/* fix for mootools 'domready', uncomment if need*/
/*	window.fireEvent('domready');  */
};

При використанні window.fireEvent(‘domready’); потрібно бути обережним.
По перше це допомагає лише якщо скрипт дійсно не “бачить”, що сторінка “готова”.
По друге, при сумісному використанні з іншими скриптами які нормально працюють з AJAX – це може призвести, до додаткових не бажаних помилок, таких як подвійне виконання цього скрипта. Тому в плагіні ця функція за замовчуванням закоментована.

В деяких випадках потрібно використовувати window.fireEvent(‘load’); – все залежить від самого скрипта який “відмовляється” працювати.

Взагалі, якщо “неробочий” (наприклад LightBox) скрипт потрібен лише на певній сторінці, то вище вказану функцію краще виконувати саме на цій сторінці, а не на кожній. Це попередить виникнення додаткових помилок.
Приклад для сторінки “Галерея” ( mysite.com/galery ):

if(location.toString().indexOf('/galery') != -1){
	window.fireEvent('domready'); 
}

Далі буде, можливо… :)

91s коментарів to “ Проблеми при використанні LightBox та деяких інших скриптів ”

  1. юрий коментує:

    Здравствуйте. Подскажите пожалуйста, как подружить fullajax и модуль rocktabs. Все вроде как работает, но после обновления страницы пропадает анимация, в google chrome в режиме разработчика сразу появляется ошибка. Пример некорректной работы на сайте it.helpsiti.ru Если не затруднит помогите с решением. Просто не очень силен в mootools

  2. Johnebyne коментує:

    Hi

  3. Reza коментує:

    Hello
    Your work is really great. but there is a big problem.
    my custom javascript codes will add event listener to some objects. and I knew that every time I change my page, ajax will add another callback to my functions and because of this, my objects will trigger events more than one time (it will trigger the number of every ajax loaded page.). and for example if I added an event to ‘click’, it will trigger more than one and my codes will not work true. is anyway that I could remove callback from your codes?
    it is really necessary

  4. wrfw коментує:

    Hello How does it work with language-switcher?
    i tried semi-auto.
    sidebar:id5|languageposition:id5

    only the article changes, when selecting language,
    sidebar stays in language..

    any idea?

  5. wrfw коментує:

    id is not the same like my example ;)

Написати відповідь до Johnebyne Скасувати відповідь

Ваша пошт@ не публікуватиметься. Обов’язкові поля позначені *

Можна використовувати XHTML теґи та атрибути: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>