[英]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.