有人可以告诉我这段代码有什么问题吗? Chrome和Firefox表示scrns[i]
未定义,但Chrome仍会在鼠标悬停时运行代码。
function nextPrev() {
if (!document.getElementsByClassName) return false;
var scrns = document.getElementsByClassName('scrn');
for (var i=0; i<=scrns.length; i++) {
// console.log(i);
scrns[i].onmouseover = function() {
// console.log('foo');
}
}
}
window.onload = nextPrev();
我已经测试了for循环是否正常工作,并试图以我知道的各种方式确定问题的来源。我甚至看了一下我前一本书中的一个例子,但不明白为什么scrns[i]
未被定义。
任何帮助都非常感谢!
答案 0 :(得分:5)
你循环太远了。如果i等于scrns.length
,那么它超出了数组的末尾。删除停止条件中的=
:
for (var i=0; i < scrns.length; i++) {
答案 1 :(得分:5)
循环时你正在使用<=
。但请记住,数组从0开始索引,而不是1.因此,包含10个元素的数组的长度为10,但元素为0-9。更改以下内容:
for (var i=0; i<=scrns.length; i++) {
为:
for (var i=0; i < scrns.length; i++) {
答案 2 :(得分:0)
你有一个错误。将<=
更改为<
可以解决您的问题。您可以在将来使用循环不变量来确保不要过去。
http://en.wikipedia.org/wiki/Loop_invariant
一般情况下,循环遍历数组时,从迭代计数器开始为0,然后循环,只要计数器小于数组的长度。