2010-09-21 2 views
0

Я делаю плагин jquery, который перемещает фон div (на основе другого плагина). Я не понимаю, почему, если у меня есть только 1 элемент, использующий $ (". Video"). MoveBackground(); работает хорошо. Если у меня есть 2 элемента или больше, работает только последний.Плагин jQuery работает только при последнем использовании селектора

Код: http://jsfiddle.net/7PfEN/. Он не работает на jsfiddle, но отлично работает (ну, только последний) в локальном.

Заранее благодарен!

ответ

1

Я считаю, что ваша проблема в том, что плагин использует sys объекта для хранения таймера анимации, а sys объекта является глобальным для всех элементов, которые Вы передаете в через один вызов .moveBackground().

Таким образом, хотя это не будет работать ...

$('.video').moveBackground(); 

Я считаю, что это будет ...

$('.video').each(function(){ 
    $(this).moveBackground(); 
}); 
+0

Да! Это работает! Спасибо. Кстати, что вы думаете о производительности? Что лучше? Заранее спасибо! – ipalaus

0

Во-первых, ваш jsFiddle пытается $(".image").moveBackground() вместо $(".video")

Но реальная проблема заключается в том, что каждый вызов init() переписывает ваше глобальное значениеsys.elem. В сильно урезанном виде, вот такой подход, который может работать для вас:

function init(elem) { 
    ... 
    $(elem).hover(function() { 
    ... 
    }); 
} 
... 
return this.each(function() { init(this); }); 

Вам нужно пройти elem на вниз через различные функции, используя его там, где вы в настоящее время sys.elem.

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