输入类型的getElementById.value返回undefined

时间:2015-11-30 09:25:50

标签: javascript html

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

我已经尝试过查看其他帖子,但没有任何运气。

我的代码:

<!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>

1 个答案:

答案 0 :(得分:6)

如果您查看网络控制台,则会在那里发现错误:TypeError: Cannot read property value of null&#34;

这是因为您的代码正在执行此操作:

var firstNumber = document.getElementById('firstNumber').value;
在元素存在之前

,这意味着document.getElementById('firstNumber')为您提供null,并在value上查找null会引发错误(阻止所有来自运行的其余步骤代码,但不会阻止创建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> 中的这种业务是一种反模式。所以(但还有其他事情需要继续阅读)

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> 函数:

foreach (var item in spTab3.Children)
  {
    if (item.GetType() == typeof(ListBox))
      ((ListBox)item).Visibility = Visibility.Collapsed;
     if (item.GetType() == typeof(Grid))
      ((Grid)item).Visibility = Visibility.Collapsed;
    ....
  }

请注意,您的变量不再是全局变量,现在它们很好地函数内部。一般来说,避免全局变量,全局命名空间已经过于拥挤。