0

由于这样的关闭,我已经知道如何循环:

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)的开头,我会看到: then (如预期的那样),但不像循环的第二次循环过早停止。var i1text1, 1text2, 1text3, 1text42text12text2, 2text3...var k

4

1 回答 1

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";
    }
  }
}

无论如何,如果页面上不存在其中一个元素,您的循环可能会提前停止。在尝试分配给它之前,您应该检查元素的存在。

于 2012-12-29T20:42:13.327 回答