输入类型的getElementById.value返回undefined

Chr*_*ker 0 html javascript

我正在尝试提醒输入类型的值.警报给我'未定义'.

我试过通过其他一些帖子但没有任何运气.

我的代码:

<!DOCTYPE html>
<html>
    <head>
        <title></title>

        <script>

            /* Global Vars */
            var firstNumber = document.getElementById('firstNumber').value;
            var secondNumber = document.getElementById('secondNumber').value;
            var plus = document.getElementById('plus');
            var minus = document.getElementById('minus');
            var times = document.getElementById('times');
            var divide = document.getElementById('divide');
            var result = document.getElementById('result');

            function cool() {
                //var sum = Number(firstNumber) + Number(secondNumber);

                alert(secondNumber);
            }
        </script>
    </head>
    <body>
        <input type="number" placeholder="Getal 1" id="firstNumber" /> <input type="number" placeholder="Getal 2" id="secondNumber" /><br><br>
        <input type="text" id="result" disabled /><br><br>
        <button id="plus">+</button> <button id="minus">-</button> <button id="times">x</button> <button id="divide">/</button>

        <button onClick="cool()">Test</button>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 6

如果您查看Web控制台,您会在那里发现错误:TypeError: Cannot read property value of null"

这是因为你的代码是这样做的:

var firstNumber = document.getElementById('firstNumber').value;
Run Code Online (Sandbox Code Playgroud)

之前的元素存在,这意味着document.getElementById('firstNumber')给你null,望着valuenull抛出一个错误(防止的是一步一步的代码,所有其余的运行,但不阻止cool功能被创建,作为首个完成的,任何步骤之前,已经运行了代码).该错误阻止secondNumber了获取值,因此它保持其默认undefined值,您可以在以后调用时看到该值cool.

通常,除非您有特殊原因,否则请将脚本放在结束</body>标记之前.特别是,将脚本放入其中的这种业务head是一种反模式.所以(但还有更多工作要做,请继续阅读):

<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <input type="number" placeholder="Getal 1" id="firstNumber" /> <input type="number" placeholder="Getal 2" id="secondNumber" /><br><br>
        <input type="text" id="result" disabled /><br><br>
        <button id="plus">+</button> <button id="minus">-</button> <button id="times">x</button> <button id="divide">/</button>

        <button onClick="cool()">Test</button>
        <script>

            /* Global Vars */
            var firstNumber = document.getElementById('firstNumber').value;
            var secondNumber = document.getElementById('secondNumber').value;
            var plus = document.getElementById('plus');
            var minus = document.getElementById('minus');
            var times = document.getElementById('times');
            var divide = document.getElementById('divide');
            var result = document.getElementById('result');

            function cool() {
                //var sum = Number(firstNumber) + Number(secondNumber);

                alert(secondNumber);
            }
        </script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

但是:您的代码正在读取页面加载时的输入值(函数外部的代码立即运行).您可能想要在单击按钮时阅读它们.如果是的话,请将您的代码读取它们进入cool功能:

<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <input type="number" placeholder="Getal 1" id="firstNumber" /> <input type="number" placeholder="Getal 2" id="secondNumber" /><br><br>
        <input type="text" id="result" disabled /><br><br>
        <button id="plus">+</button> <button id="minus">-</button> <button id="times">x</button> <button id="divide">/</button>

        <button onClick="cool()">Test</button>
        <script>

        function cool() {
            var firstNumber = document.getElementById('firstNumber').value;
            var secondNumber = document.getElementById('secondNumber').value;
            var plus = document.getElementById('plus');
            var minus = document.getElementById('minus');
            var times = document.getElementById('times');
            var divide = document.getElementById('divide');
            var result = document.getElementById('result');

                //var sum = Number(firstNumber) + Number(secondNumber);

            alert(secondNumber);
        }
        </script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

请注意,您的变量不再是全局变量,因为它们很好地位于函数内部.在一般情况下,避免全局变量,全局命名空间已经远远太拥挤了.