出于某种原因,在 onclick 触发 ss.goTo() 后,ss.transition() 不会影响相应的 DOM 元素。//Init 下的 ss.transition() 调用确实按预期工作。我认为这是一个范围问题。帮助不大?
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();
最佳答案
for (i in ss.as) {
您不应该对数组或本例中的 NodeList 使用 for...in
循环。您将获得不需要的成员属性,例如 item
和 length
。您也不能依赖以任何特定顺序退回的元素;很可能至少 ss.last
不会是您所期望的。如果它是非项目属性,ss.old.style.display
肯定会失败并出现异常,从而破坏脚本。
序列的正确循环是老式的 C 结构:
for (var i= 0; i<ss.as.length; i++)
此外,您在哪里将调用绑定(bind)到 goTo
?如果您在循环中使用内部函数执行此操作,则很可能还会遇到经典的循环闭合问题。参见例如。 this question .
关于JavaScript DOM 引用不支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2158109/