2013-10-18 132 views
-1
var num = Math.floor(document.getElementById("num").innerHTML); 
document.getElementById("num").innerHTML = num+1; 
} 
else{ 
document.getElementById("num").innerHTML = num-1; 
} 

我得到$ NaN,不幸的是!爲什麼這個JavaScript floor數學代碼返回nan?

範圍的內容是<span id="num">0</span>,你知道,沒什麼特別的,我必須做一些愚蠢的事情,所以我完全困惑!

謝謝你。

+0

因爲'innerHTML'是NaN。 –

+1

如果你要發佈代碼,它應該是有效的代碼... if在哪裏? $從哪裏來? – epascarello

+0

你可以在那裏拋出一些'console.log'語句來看看你得到了什麼,因爲你在做什麼沒有什麼內在的錯誤。我會這樣做:'var elt = document.getElementById('num'); console.log(elt); var numStr = elt.innerHTML; console.log(numStr);'。那麼答案應該變得清楚。 –

回答

0

而且完整的代碼說明了爲什麼-1不起作用

if (document.getElementById("div").style.top === "40px") { 
    var num = Math.floor(document.getElementById("num").innerHTML); 
    document.getElementById("num").innerHTML = num + 1; 
} else { 
    document.getElementById("num").innerHTML = num - 1; 
} 

那麼什麼是undefined - 1?那麼這是NaN!爲什麼?因爲num是在if中設定的,而不是其他的。

你如何解決它?移動var num行以外的if!

0

.innerHTML返回一個字符串。字符串不能是.floor ed。您首先必須登錄parseInt()

+0

,但是爲什麼我只能在-1部分獲得$ NaN?我忘了在原始問題中說,但num + 1工作! –

+0

我剛剛嘗試過'parseInt(document.getElementById(「num」)。innerHTML);'。但它仍然返回NaN。 –

+0

所以不要鏈接調用並開始檢查單個元素。 'x = document.getElementById('num')'。它會返回什麼嗎? 'y = x.innerHTML',是否會返回任何內容...... –

0

顯示的代碼不完整,無法跟蹤。但是我假設NaN先傳遞給Floor()。將有效的數字/數字字符串傳遞給floor()以使其工作。錯誤出現在問題中未顯示的代碼邏輯中。

編輯:

看你的代碼後,很明顯,這個問題是由於錯位的賦值操作。如果調用'if'部分,一切都很好,但如果調用'else'部分,則不會創建或分配值,導致它爲NaN。要解決這個問題,我建議這樣做:

更改此:

if(document.getElementById("div").style.top === "40px"){ 
    var num = Math.floor(document.getElementById("num").innerHTML); 
    document.getElementById("num").innerHTML = num+1; 
} 
else{ 
    document.getElementById("num").innerHTML = num-1; 
} 

要這樣:

var num = Math.floor(document.getElementById("num").innerHTML); 
if(document.getElementById("div").style.top === "40px"){ 
    document.getElementById("num").innerHTML = num+1; 
} 
else{ 
    document.getElementById("num").innerHTML = num-1; 
} 
+0

這裏是[完整的代碼](http://codepad.org/ZXNcZuqc) –

+0

謝謝,我編輯了我的答案,包括問題,它的修復。 – Hec