Вы здесь

Как повторно инициализировать скрипты при загрузке контента ajaxом?

0

Переходы между страницами реализованы с помощью ajax,. Возникла проблема, на страницах на которых содержится, например views+jcarousel (или другие скрипты), перестают работать скрипты. Как я понимаю связано это с тем, что обновляется одна область на сайте, head не затрагивается, отсюда вопрос - как повторно инициализировать скрипты при загрузке контента ajaxом?

Версия Drupal: 
7.x
Категория: 
AJAX
Вопрос задан 26.07.2017 - 16:33
Аватар пользователя im
im
22

Не претендую на детальный ответ, но рекомендую разобраться с Drupal.behaviors. Если скрипты инициализируются не в $(document).ready(function()) , а через attachBehaviors, то они будут переинициализироваться по каждому срабатыванию ajax.
https://www.drupal.org/docs/8/api/javascript-api/javascript-api-overview

Комментарий оставлен 26.07.2017 - 21:58

Спасибо за ответ! Но тут дело в том, что скрипты не кастомные, а подключенные модулями, такие например как jcarousel views, я думаю, что у них присутствует обертка

Комментарий оставлен 27.07.2017 - 10:00

Ну так корректно написанный и корректно работающий контрибный модуль - птица редкая, править их приходится постоянно ;) Иногда такие плюхи находишь, что диву даёшься как другие-то им пользуются вообще ;)

Комментарий оставлен 27.07.2017 - 11:26

посмотрел, вся jcarousel обернута как надо. Нашел убогий способ из костылей и кала: при запросе куска страницы, вытягивать еще head, и добавлять его в скрытом блоке, тогда скрипты работаю.... но способ конечно так себе..... Товарищи, ну есть какие нить мысли?

Комментарий оставлен 27.07.2017 - 11:37

Ответы

0

Короче, в итоге забил я на друпаловски подключенные скрипты типа карусели, и подключил свои кастомные, которые легко инициализируются при событии аякса -

 $(".view-content").slick({});

как повторно вызвать карусель интегрированныю в дру модуль - я хз и пока не нашел способа.

Ответ дан 28.07.2017 - 16:52
Аватар пользователя im
im
22
0

Можно попробовать воспользоваться событием ajaxSuccess, и внутри создать условия выборки правильных страниц и запуск на них скриптов:

$(document).ajaxSuccess(function(event, xhr, settings) {
     if ( settings.url == "ajax/test.html" ) {
         $( ".log" ).text( "Triggered ajaxSuccess handler. The ajax response was: " + xhr.responseText );
     }
   });
Ответ дан 27.07.2017 - 10:48
Аватар пользователя Apuox
Apuox
18

а как сам скрипт вызвать? че то туплю)

Комментарий оставлен 27.07.2017 - 11:04

Ну просто провести инциализацию карусели, внутри обработчика ajaxSuccess, типа:

$('.jcarousel').jcarousel();

Комментарий оставлен 27.07.2017 - 13:06

Uncaught TypeError: $(...).jcarousel is not a function

Комментарий оставлен 27.07.2017 - 13:33