Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.01.2020, 14:58
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Как создать глобальную функцию внутри другой функции?
Есть огромный внешний 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?
Ответить с цитированием
  #2 (permalink)  
Старый 18.01.2020, 15:07
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

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


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

Последний раз редактировалось Aetae, 18.01.2020 в 15:12.
Ответить с цитированием
  #3 (permalink)  
Старый 18.01.2020, 15:50
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

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

<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') и ошибка ушла. Спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача результата функции, другой функции Aleksandr Chirkov Элементы интерфейса 3 24.06.2017 17:32
Как переменую из одной функции, присвоить к другой функции? Terminator004 Общие вопросы Javascript 5 31.05.2017 16:40
Как вызвать eval в контексте другой функции для доступа к ее локальным переменным? Почемучкин Общие вопросы Javascript 8 29.10.2012 22:31
Остановить функцию внутри другой функции sliv Общие вопросы Javascript 5 07.10.2012 18:07
Как привратить имя функции в саму функцию webmakaka Общие вопросы Javascript 2 15.09.2011 16:23