2013-07-24 94 views
0

這是在超時函數中循環。 nw保持未定義狀態,或者在每次新的啓動時重新設置爲undefined。這是爲什麼?在Javascript中組裝var var

$("#wert"+i).load('variable.html #w'+i); 
if(! nw){ 
alert(nw); 
var nw = eval('neuerwert'+i); // Here I set the var nw, so why is it undefined again the next time around? 
} 
if ($("#w"+i).html() != nw){ 
wertaenderung('#wert'+i); 
nw = $("#w"+i).html(); 
}; 
+0

您需要將變量聲明放在函數之外,以便它繼續存在。 – Barmar

+0

這是一個答案(確實是正確的答案),不僅僅是評論。 – Utkanos

+0

應該不是所有的代碼都在'.load'觸發的回調函數中嗎? – Alnitak

回答

1

變量nw必須在正確的範圍:

var nw; 
$("#wert"+i).load('variable.html #w'+i); 
if(! nw){ 
    alert(nw); 
    nw = eval('neuerwert'+i); 
} 
if ($("#w"+i).html() != nw){ 
    wertaenderung('#wert'+i); 
    nw = $("#w"+i).html(); 
}; 

您使用的變量,你宣佈它

+3

是OP應該發揮「發現差異」? – Alnitak

+0

對不起...我第一次發佈的代碼,然後寫我做了什麼 –

+1

JavaScript變量不侷限於if語句。見http://stackoverflow.com/questions/500431/javascript-variable-scope – Knollbert

1

嘗試移動nw出負載功能之前:

var nw; 
$("#wert" + i).load('variable.html #w' + i); 
if (!nw) { 
    alert(nw); 
    nw = eval('neuerwert' + i); 
} 
if ($("#w" + i).html() != nw) { 
    wertaenderung('#wert' + i); 
    nw = $("#w" + i).html(); 
}; 
+0

它不是全球性的 –

1

只需刪除此行中的「var」:

var nw = eval('neuerwert'+i); 

因此,您將在全局上下文中初始化nw變量。

通過寫入變種NW = ...你創建你離開時的回調函數被移除的局部變量。