2013-10-18 67 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