簡體   English   中英

Javascript閉包:循環內循環

[英]Javascript closures : Loop inside Loop

我已經知道如何循環感謝閉包這樣:

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

但循環部分丟失。 如果我在var i循環的開頭放置alert(ktext + i) ,我看到: 1text1, 1text2, 1text3, 1text4然后是2text1 (如預期的那樣),但不是2text2, 2text3...好像第二次傳遞var k循環太早停止。

您不必使用閉包:

for( k=1; k<=last_number; k++) {
  for( i=first; i<=last; i++) {
    document.getElementById(k+text+i).onmouseover = function() {
      this.style.display = "block";
    }
  }
}

無論如何,如果頁面上不存在其中一個元素,您的循環可能會提前停止。 在嘗試分配元素之前,您應該檢查元素是否存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM