jquery не видит переменную в window load

157
20 декабря 2019, 19:00

Я пытаюсь создать переменную (объект), затем отредактировать ее после загрузки DOM. В данном случае в переменной pageQuery находятся селекторы, которые становятся объектами jquery в переменной page.

var pageQuery = {
    someSelector: '.select'
}
var page = {};
$(document).ready(function() {
    for (var key in pageQuery) {
        page[key] = $(pageQuery[key]);
    }
});

Но когда я пытаюсь использовать переменную page в другом js файле, также в событии document ready, то получаю ошибку:

TypeError: page.someSelector is undefined

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

UPD1: Также второй скрипт запускается по window.load и window.resize, и там все нормально работает.

UPD2: На счет window.load (точнее $(window).on('load')) я был не прав. Как раз в document.ready все работает прекрасно, а вот с window.load и возникает ошибка. Вообще, window.load почему-то происходит до document.ready, причем это никак не зависит от моего скрипта, это происходит любом документе. Возможно я просто чего-то не понимаю, но мне казалось, что window.load должен в любом случае происходить позже, после полной загрузки страницы.

Answer 1

Размести скрипт с обращением к page.someSelector внутри подписки на ready, причём расположенной в коде после того фрагмента, который приведён в вопросе.

READ ALSO
ScrollMagic не может работать с GSAP?

ScrollMagic не может работать с GSAP?

Всем привет, я пытаюсь научиться анимации по скроллу и хочу попробовать для этого ScrollMagic совместно с GSAP, но у меня не получается даже скомпилировать...

152
Массив уникальных массивов. JavaScript

Массив уникальных массивов. JavaScript

Есть некий скрипт сбора координат вида [2,1] в массивКоординаты могут повторяться, но итоговый массив должен содержать только уникальные координаты

114
vue js Поиск внутри массива

vue js Поиск внутри массива

Есть массив объектов:

166