我在JS中遇到了這個問題 - 根本不是我的母語。我已經聲明瞭一個全局變量var divID = 0;
,它只是一個唯一的數字。在我的HTML頁面上有一個按鈕,當你點擊它時,會在DOM中添加一堆東西。使用元素ID的Javascript局部變量
喜歡的東西:
function addStuff() {
divID++;
newDiv = document.createElement("div");
newDiv.id = "div" + divID;
// Create a bunch more nodes under newDiv
// including some button with id: "newButton" + divID
document.getElementById("someDiv").appendChild(newDiv);
$("#newButton" + divID).click(function() {
// do stuff with child nodes of "newDiv" + divID
});
}
我希望這是有道理的。基本上,每次調用addStuff()
時,都會將一塊東西添加到DOM中。如果用戶反覆點擊它,那麼一個接一個地重複添加相同的,相同的東西。
添加的每個塊都有一些來自divID
的ID後綴,並且塊中的某些元素具有影響同一塊的其他元素的事件。每個塊應該是獨立的。
但是,當用戶單擊按鈕兩次時,要添加兩個塊(一個ID後綴爲1,另一個ID後綴爲2),兩個塊的事件始終會影響最近添加的塊的子元素。
所以想象我有10塊東西。所有應該自包含塊的事件實際上都會影響最後一個塊,而不是它們所在的塊。
我知道這樣的事情發生在C#,當我在一個循環中閥芯向上線程和迭代變量起着線主體一定的作用:
for (int i = 0; i < 10; i++) {
new Thread(new ThreadStart(delegate() { Console.WriteLine(i); })).Start();
}
會產生意想不到的結果 - 主要是9的,而不是0到9,但是:
for (int i = 0; i < 10; i++) {
int j = i;
new Thread(new ThreadStart(delegate() { Console.WriteLine(j); })).Start();
}
將工作正常。
我試過類似的東西。在我的Javascript代碼我寫道:
divID++;
localDivID = divID;
,並建立DOM中的東西時,使用localDivID
代替divID
。但是這完全沒有影響。我仍然無法引用具有我想要的ID後綴的元素。
通過對所有東西使用jQuery,你可以使你的代碼更短。 – SLaks
@ahren我顯然沒有正確解釋它。 – Ozzah
@SLaks當然,但我必須在明天完成這件事,我對JQuery的瞭解甚至比我對JS的知之甚少。 – Ozzah