JavaScript DOM ссылки не держатся - PullRequest
0 голосов
/ 29 января 2010

По какой-то причине ss.transition () не влияет на соответствующие элементы DOM после того, как ss.goTo () вызван щелчком мыши.Вызов ss.transition () в разделе // Init работает должным образом.Я предполагаю, что это проблема масштаба.Маленькая помощь?

var ss = {};

ss.goTo = function(i) {
    ss.old = ss.current;
    ss.current = ss.slides[i];
    ss.transition();
}

ss.transition = function() {
    ss.old.style.display = "none";
    ss.current.style.display = "block";
}

// Hooks

ss.div = document.getElementById("slides");
ss.as = ss.div.getElementsByTagName("a");

// References

ss.slides = [];
for (i in ss.as) {
    if (ss.as[i].rel == "slide") {
        ss.slides.push(ss.as[i]);
    }
}
ss.first = ss.slides[0];
ss.last = ss.slides[ss.slides.length-1];

// Init

ss.current = ss.first;
ss.old = ss.last;
ss.transition();

Ответы [ 2 ]

2 голосов
/ 29 января 2010
for (i in ss.as) {

Вы не должны использовать цикл for...in над массивом или, в данном случае, NodeList. Вы получите свойства, которые вам не нужны, например, item и length. Вы также не можете полагаться на предметы, возвращаемые в каком-либо конкретном порядке; очень вероятно, что по крайней мере ss.last не будет тем, что вы ожидаете. Если это свойство, не относящееся к элементу, ss.old.style.display определенно завершится с ошибкой, нарушив сценарий.

Правильный цикл для последовательности - это конструкция старой школы C:

for (var i= 0; i<ss.as.length; i++)

Кроме того, где вы связываете вызовы с goTo? Если вы делаете это в цикле с функцией внутри вас, у вас также может возникнуть классическая проблема закрытия цикла. См. Например этот вопрос .

0 голосов
/ 29 января 2010

Причина сбоя заключается в том, что вы теряете ссылку на скрытый в данный момент элемент, прежде чем он снова появится. Вам нужно присвоить old для display: block, затем переключить old = current, current = variable, а затем скрыть old.

...