2013-03-28 54 views
-1

每次調用變量時,如何在變量內增加一個整數?的JavaScript。每次調用該變量時,如何增加變量中的整數? Javascript

var a=0; 

var t=loadXMLDoc("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist="+x[a].getElementsByTagName("name")[0].childNodes[0].nodeValue+"&api_key=83e386b0ba08735e3dee9b118478e56d&lang=en").getElementsByTagName("bio"); 

for (i=0;i<20;i++) 
{ 
document.write("<div><button type='button' onclick='document.getElementById("+i+").innerHTML=t[0].getElementsByTagName(\"summary\")[0].childNodes[1].nodeValue;'>Open Bio</button></div>"); 
} 

我不知道如何去增加變量a。每次在for循環中調用變量t時,我都需要它增加1。

當我把所有的代碼放在for循環中時,我得到[object node list],所以這個方法是不需要的。

+0

不調用* *變量*。 – Bergi

+2

++有什麼問題? –

+0

你真的必須在循環中加入't',否則它只會被評估一次。爲什麼會改變輸出結果,你目前得到了什麼? – Bergi

回答

0

編輯後,我想我現在可以看到你的問題。您需要將loadXMLDoc語句放在循環中(因爲您要裝入20個不同的XML文件),但不能將每個調用的結果分配給同一個變量t - 因爲一旦單擊該按鈕,處理程序將評估t並只獲取最後一個值。

相反,使用數組:

var bios = []; // empty array 
for (var i=0; i<20; i++) { 
    var artist = x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue, 
     doc = loadXMLDoc("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist="+artist+"&api_key=83e386b0ba08735e3dee9b118478e56d&lang=en"), 
     bio = doc.getElementsByTagName("bio")[0].getElementsByTagName("summary")[0].childNodes[1].nodeValue; 

    bios[i] = bio; // store it in the array 

    document.write("<div><button type='button' onclick='document.getElementById("+i+").innerHTML=bios["+i+"];'>Open Bio</button></div>"); 
} 

當然,同時,將工作是一堆糟糕的做法,包括DOM節點/屬性的

  • 不安全的訪問。如果xml改變了它的格式,你會在這裏得到很多例外。您現在可能確定這種情況不會發生,但在try-catch中包含artistbio可能不是一個壞主意。
  • snychronous A jax。一個人可以做得比這更好。
  • 即使您不需要它們,也可以加載20個文檔(並且按順序!)。只有在單擊相應按鈕時纔可能嘗試加載它們。
  • document.write
  • 內嵌屬性的事件處理程序
  • ...甚至通過JS創建它們。
+0

這是一個很大的幫助,並解決了這個問題。謝謝! –

2

如果我正確理解你的問題,你可以爲屬性定義你自己的getter和setter。

var o = {} 
o.__defineSetter__('property', function(value) { this._counter = 0; this._holder = value; }) 
o.__defineGetter__('property', function() { console.log(this._counter++); return this._holder; }) 

計數器將重置每次o.property被分配一個值

o.property = 'Some value' 

,然後每增加財產被訪問時。 所以,

console.log(o.property) 

將打印

0 
Some value 

到控制檯。如果你再次這樣做,它會打印

1 
Some value 
+0

呃,沒有。這太過分了,OP只需要增加一個變量。 – Bergi

+0

確實。在他編輯之後,我可以看到我沒有正確理解他的問題。 – Skymt