Переходы между страницами реализованы с помощью ajax,. Возникла проблема, на страницах на которых содержится, например views+jcarousel (или другие скрипты), перестают работать скрипты. Как я понимаю связано это с тем, что обновляется одна область на сайте, head не затрагивается, отсюда вопрос - как повторно инициализировать скрипты при загрузке контента ajaxом?
Ответы
Короче, в итоге забил я на друпаловски подключенные скрипты типа карусели, и подключил свои кастомные, которые легко инициализируются при событии аякса -
$(".view-content").slick({});
как повторно вызвать карусель интегрированныю в дру модуль - я хз и пока не нашел способа.
Можно попробовать воспользоваться событием ajaxSuccess, и внутри создать условия выборки правильных страниц и запуск на них скриптов:
$(document).ajaxSuccess(function(event, xhr, settings) {
if ( settings.url == "ajax/test.html" ) {
$( ".log" ).text( "Triggered ajaxSuccess handler. The ajax response was: " + xhr.responseText );
}
});
а как сам скрипт вызвать? че то туплю)
Ну просто провести инциализацию карусели, внутри обработчика ajaxSuccess, типа:
$('.jcarousel').jcarousel();
Uncaught TypeError: $(...).jcarousel is not a function
Не претендую на детальный ответ, но рекомендую разобраться с Drupal.behaviors. Если скрипты инициализируются не в $(document).ready(function()) , а через attachBehaviors, то они будут переинициализироваться по каждому срабатыванию ajax.
https://www.drupal.org/docs/8/api/javascript-api/javascript-api-overview
Спасибо за ответ! Но тут дело в том, что скрипты не кастомные, а подключенные модулями, такие например как jcarousel views, я думаю, что у них присутствует обертка
Ну так корректно написанный и корректно работающий контрибный модуль - птица редкая, править их приходится постоянно ;) Иногда такие плюхи находишь, что диву даёшься как другие-то им пользуются вообще ;)
посмотрел, вся jcarousel обернута как надо. Нашел убогий способ из костылей и кала: при запросе куска страницы, вытягивать еще head, и добавлять его в скрытом блоке, тогда скрипты работаю.... но способ конечно так себе..... Товарищи, ну есть какие нить мысли?