我已经知道如何通过这样的闭包来循环:
for (var i = first; i <= last; i++) {
document.getElementById(more + i).onmouseover = (function(arg1) {
return function() {
document.getElementById(arg1).style.display = "block";
}
})(i);
}
但我现在想看看循环内部。
我有DOM的元素,必须动态地附加到其他元素。元素类型为:'1text1', '1text2', '1text3',...
和'2text1', '2text2', '2text3', '3text4'...
我尝试过这样的事情:
var text;
var ktext;
for (var k = 1; k <= last_number; k++) {
for (var i = first; i <= last; i++) {
ktext = k + text;
document.getElementById(ktext + i).onmouseover = (function(arg1, arg2) {
return function() {
document.getElementById(arg1 + arg2).style.display = "block";
}
})(ktext, i);
}
}
但循环部分丢失。如果我将alert(ktext + i)
放在var i
循环的开头,我会看到:1text1, 1text2, 1text3, 1text4
然后2text1
(正如预期的那样),而不是2text2, 2text3...
,就好像var k
循环的第二遍过早停止。
答案 0 :(得分:2)
您不必使用闭包:
for( k=1; k<=last_number; k++) {
for( i=first; i<=last; i++) {
document.getElementById(k+text+i).onmouseover = function() {
this.style.display = "block";
}
}
}
无论如何,如果页面上不存在其中一个元素,您的循环可能会提前停止。在尝试分配元素之前,您应该检查元素是否存在。