2012-11-27 45 views
1

我在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後綴的元素。

+0

通過對所有東西使用jQuery,你可以使你的代碼更短。 – SLaks

+0

@ahren我顯然沒有正確解釋它。 – Ozzah

+0

@SLaks當然,但我必須在明天完成這件事,我對JQuery的瞭解甚至比我對JS的知之甚少。 – Ozzah

回答

3

您需要創建一個本地變量。
在函數中聲明變量(使用var關鍵字)。

請注意,Javascript沒有塊範圍;你不能在循環內做到這一點。

+0

這工作。所以如果我在JS中沒有'var'的函數內聲明一個變量,它會自動全局化? – Ozzah

+0

@ jfriend00感謝您試圖提供幫助 - 但看起來您感到困惑的不僅僅是幫助。我有2個變量 - 'divID',它應該是全局的,確保每個塊都是唯一的,'localDivID'應該是本地的,並且確保每個塊隻影響自己。問題是我在'localDivID'前面缺少'var',這使得它成爲另一個全局變量。問題已解決。謝謝SLaks。 – Ozzah

相關問題