2015-03-01 5 views
0

Как переменные, такие как img : $('img') в моей функции теряют свое значение после вызова ajax. Вот пример функции.

imageFades: { 
    img : $('img'), 

    init: function() { 
     this.img.fadeIn(200) 
     console.log('fire') 
    } 
} 

После вызова ajax console.log запускается, но fadeIn не работает. Я тестировал непосредственно добавление $('img').fadeIn(200) к функции init, и это работает нормально. Что именно происходит?

+1

Почему бы не опубликовать всю функцию, включая ajax, если это проблема? – adeneo

+0

В любом случае, вероятно, проблема заключается в том, что изображения получаются при создании объектного литерала, и в то же время он получает любые изображения в DOM, а не изображения, добавленные позже. – adeneo

+0

Я изолировал проблему до переменных, теряющих их ценность, никаких проблем с функцией нет. – jaybee

ответ

4

Если вы заменили свои изображения в вызове ajax (как это звучит) или в любое время после создания объекта imageFades, вам придется перезапустить селектор, чтобы он мог видеть вновь добавленные изображения.

imageFades: { 
    init: function() { 
     $('img').fadeIn(200); 
     console.log('fire') 
    } 
} 

Объекты jQuery не являются «живыми». Они не поспевают за изменениями в DOM. Они представляют собой моментальный снимок того, что было в DOM, когда вы создали объект jQuery, и это время, когда он выполнял запрос выбора.

+0

Приветствия, это имеет смысл. Таким образом, нет возможности обойти селекторов в качестве переменных? – jaybee

+0

@JayBon - объекты jQuery представляют собой снимок набора элементов DOM. Они не обновляют себя. Об этом нет. Если вам нужен текущий запрос, вам нужно снова запустить запрос (например, создать новый объект jQuery). Для определенных типов обработки событий можно обойти это с помощью делегированной обработки событий, но это не относится к этому случаю. – jfriend00

+0

@ jfriend66 Хорошо, спасибо за вашу помощь. Тогда это будет излишним? 'imageFades { IMG: 'IMG', INIT: функция() {$ (this.img) .fadeIn (200) console.log ('огонь') } }' – jaybee

0

Трудно сказать, не видя весь ваш код, но, скорее всего, вы путали использование this. В функции ответа jQuery AJAX this не установлен на созданный объект. Чтобы процитировать jQuery API:

this ссылки во всех обратных вызовов является объектом в опции контекста, переданного $.ajax в настройках;

Смежные вопросы