Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как создать глобальную функцию внутри другой функции? (https://javascript.ru/forum/dom-window/79277-kak-sozdat-globalnuyu-funkciyu-vnutri-drugojj-funkcii.html)

sovsem-nub 18.01.2020 14:58

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

<script async  src="https://heeg.ru/test/js/swiper.min.js"  onload='function sliderInit(){var swiper=new Swiper(".swiper-container",{lazy:!0,pagination:{el:".swiper-pagination",clickable:!0},navigation:{nextEl:".swiper-button-next",prevEl:".swiper-button-prev"}});}; 
   sliderInit();         ' type="text/javascript"></script>


все нормально и слайдер 1 раз активируется. Но из других мест внутреннего кода функция sliderInit() недоступна, так как она была создана внутри onload. И когда я хочу опять ее запустить на новом сгенерированном DOM ее не существует. Как создать глобальную функцию внутри onload? Или как сделать эвентлисеннер на загрузку внешнего js?

Aetae 18.01.2020 15:07

1.
function sliderInit(
=>
sliderInit = function(
2.
scriptElement.addEventListener('load', function(){
  //...
});
||
document.addEventListener('load', function(){
   //  if(e.target ...
}, true);


Но вообще вам это всё не нужно. Просто вынесите саму функцию sliderInit куда-нибудь в свой основной скрипт. Для своего вызова она требует наличие загруженного слайдера, но объявить её можно когда угодно и где угодно.

sovsem-nub 18.01.2020 15:50

Просто вынести функцию не помогает,

<script>
function sliderInit(){var swiper=new Swiper(".swiper-container",{lazy:!0,pagination:{el:".swiper-pagination",clickable:!0},navigation:{nextEl:".swiper-button-next",prevEl:".swiper-button-prev"}});};
</script>
<script async  src="https://heeg.ru/test/js/swiper.min.js"  onload='sliderInit();' type="text/javascript"></script>


вылетает ошибка "Swiper is not defined"

Хотя помогает) просто сам ее из другого места раньше времени вызвал.
Поставил проверку if (typeof Swiper== 'function') и ошибка ушла. Спасибо.


Часовой пояс GMT +3, время: 23:29.