Похоже, ваш selectors
объект определяется в то время, когда DOM не готов. Когда вы пишете $("selector")
в своем объекте таким образом, функция jQuery вызывается немедленно и возвращает массив, содержащий все, что она находит.
Я считаю, что вы должны сделать одно из двух: либо измените массив селекторов, чтобы он содержал только селекторы, например:
selectors : {
div : '#top-slide',
signup : '#top-slide #signup',
login : '#top-slide #login',
signup_trigger : '#header .top-slide-triggers a.signup-trigger',
login_trigger : '#header .top-slide-triggers a.login-trigger',
close : 'a.close'
},
А потом, когда вы захотите его использовать, вызовите jQuery в этот момент:
var selectors = IT.TopSlide.selectors;
$(selectors.div).hide();
или
Поместите функции в ваш selectors
объект, который вы можете вызывать всякий раз, когда вам нужно получить текущий список соответствующих элементов dom:
selectors : {
div : function() { return $('#top-slide') },
signup : function() { return $('#top-slide #signup') },
login : function() { return $('#top-slide #login') },
signup_trigger : function() { return $('#header .top-slide-triggers a.signup-trigger') },
login_trigger : function() { return $('#header .top-slide-triggers a.login-trigger') },
close : function() { return $('a.close') }
},
А затем, чтобы использовать это, сделайте это:
var selectors = IT.TopSlide.selectors;
selectors.div().hide();
В любом случае будет работать и будет откладывать фактический вызов jQuery до нужной точки - когда вы действительно захотите соответствовать тому, что находится в DOM.
Обновление
Если вам нужно, чтобы эти функции кэшировались во время первой загрузки документа, тогда вам нужно будет вызвать функцию jQuery в обратном вызове $ (document) .ready (). Вы можете хранить код в своем пространстве имен, используя функцию, которая вызывает jQuery и кэширует все результаты, например:
IT.TopSlide = {
...
cacheSelectors: function() {
return {
div : $('#top-slide'),
signup : $('#top-slide #signup'),
login : $('#top-slide #login'),
signup_trigger : $('#header .top-slide-triggers a.signup-trigger'),
login_trigger : $('#header .top-slide-triggers a.login-trigger'),
close : $('a.close')
}
},
...
}
, а затем
$(document).ready(function() {
...
IT.TopSlide.selectors = IT.TopSlide.cacheSelectors();
...
}
Таким образом, у вас есть версия, которая кэшируется во время загрузки и готовности документа, и у вас есть возможность вызова cacheSelectors () в любой другой точке (скажем, после того, как вы узнаете, что DOM был изменено) и используйте новую копию, если вам нужно.