JavaScript DOM 引用不支持

标签 javascript dom scope reference

出于某种原因,在 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 循环。您将获得不需要的成员属性,例如 itemlength。您也不能依赖以任何特定顺序退回的元素;很可能至少 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/

相关文章:

javascript - 根据随机数组结果播放特定的声音?

javascript - 如何使用 jQuery 测量元素宽度

javascript - document.getElementsByTagName ('*' )无法识别 SVG 标签并给出控制台错误

python - 关于变量作用域的棘手 Python 问题

javascript - 如何在javascript中的函数之外保存变量值

python - 制作全局变量的本地副本

javascript - 如何找到两个 moment.unix() 之间的差异

javascript - 当网站想要使用计算机上的额外存储空间时,如何显示警报消息

javascript - 如何使用按钮更改网站的背景?

javascript - 插入音频元素会导致 CSS 错误