javascript推出NaN,我不知道为什么

时间:2013-03-29 21:22:16

标签: javascript binary decimal nan

嗯,我的Javascript作业遇到了这个问题。我需要制作一个二进制翻译器,Javascript并不是真的要我...

它有效但不是真的应该......如果我用变量声明变量,它就可以了。但是,如果我使用document.getElementById使其成为某种交互式,那么它就不想工作了。它只是给了NaN。我知道这不是一个数字,但是我使用了parseInt(),并且没有document.getElementById ...

以下是代码的工作原理:

var input = 15;
function convertdec()
{
    document.getElementById("output").innerHTML 
        = "binary number: " + parseInt(input).toString(2);
}

输出是1111,这是正确的,但这是它应该如何工作以及我希望它如何:

var input = document.getElementById("input").value;
function convertdec()
{
    document.getElementById("output").innerHTML 
        = "binary number: " + parseInt(input).toString(2);
}

如果你填写15,那么这个输出也应该是1111,但它说:

二进制数:NaN

如果有人可以帮助我,那真的很棒!

修改

好的,所以有人问我的HTML:

<!DOCTYPE html>
<html>
<head>

    <title>Binairy Converter</title>
    <link type="text/css" href="global.css" rel="stylesheet" />
    <script type="text/javascript" src="javascript.js"></script>


</head>

<body>
    <div id="main">
        <input type="text" name="text" id="input" />
        <input type="button" id="conbin" onclick="convertbin()" value="bin to dec" />
        <p id="output" ><p>
    </div>
</body>

</html>

修改

是的,我通过这样做来解决问题:

var input;
function convertdec()
{
    input = document.getElementById("input").value;
    document.getElementById("output").innerHTML = "binary number: " + parseInt(input).toString(2);
}

但是谢谢你的帮助

4 个答案:

答案 0 :(得分:3)

你在获取函数外部的DOM元素方面做得很好,因为这种DOM解析很昂贵并且DOM没有改变,但你需要获取函数内部的值来获取它们的当前值,而不是值在页面加载。试试这个:

var input = document.getElementById("input");
var output = document.getElementById("output");
function convertdec()
{
    output.innerHTML = "binary number: " + parseInt(input.value, 10).toString(2);
}

另请注意,parseInt()如果你有一个前导零,则会在八进制中解析,所以要求它为“08”会给你“10”。使用parseInt(num, 10)修复此问题。我也在上面的例子中制作了这个mod。

答案 1 :(得分:2)

这可能是你如何显示片段的一个神器...但看起来你正在设置输入到页面加载时的任何值...你可能会做得更好

function convertdec()
{
    var input = document.getElementById("input").value;

  document.getElementById("output").innerHTML = "binary number: " + parseInt(input).toString(2);
}

以便在调用函数时设置值

答案 2 :(得分:2)

在上下文中没有看到这个,这是我怀疑正在发生的事情:

// you're getting the value from the textbox as it exists
// when the page is rendered: ""
var input = document.getElementById("input").value;

// when you call this, it operates on value ... which is always ""
function convertdec()
{
    document.getElementById("output").innerHTML 
        = "binary number: " + parseInt(input).toString(2);
}

一个微妙的变化应该解决它:

var input = document.getElementById("input");
function convertdec()
{
    document.getElementById("output").innerHTML 
        = "binary number: " + parseInt(input.value).toString(2);
}

附录:正如robrich在回答中指出的那样,使用parseInt(input.value, 10)将确保文本框中的字符串被解释为基数为10的数字。

答案 3 :(得分:0)

问题的最可能原因是您没有选择正确的元素,因此input中的实际值不是字符串"15"。使用input本身作为ID是可疑的,因为它是标记类型,通常不是ID

您能告诉我们声明input的HTML吗?