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)ループの最初に置くと、次のvar iことがわかります1text1, 1text2, 1text3, 1text42text1予想どおり)が2text2, 2text3...、ループの2番目のパス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";
    }
  }
}

とにかく、要素の 1 つがページに存在しない場合、ループが早期に停止する可能性があります。割り当てを試みる前に、要素の存在を確認する必要があります。

于 2012-12-29T20:42:13.327 に答える