JS:对象未定义

时间:2016-05-26 13:35:27

标签: javascript

我想在javascript中创建一个对象,打印出已经出现的数字,但是我收到了这个错误。

Déclaration d'objet.html:30

代码:

  <script type="text/javascript">
  // <!--
    function Init()

        {
            var test= new Object;
            test.affiche= function()
            {
                var champ=Number(document.getElementById("champSaisie").value);
                alert(Number(champ+4));
            };
        }
  </script>
</head>
<body onload="Init()">

<p><label for="champSaisie">Saisissez un nombre&nbsp;: </label><input type="text" id="champSaisie"></p>
<p><input type="submit" onclick="test.affiche()" value="Effectuer le calcul"></p>



</body></html>

2 个答案:

答案 0 :(得分:3)

您正在创建的变量test local 到您的Init函数。

当您尝试访问test处理程序中的onclick时,它正在全球级别查找test,该级别不存在

我已将您的代码更新为使用addEventListener

&#13;
&#13;
function Init() {
  var test = {};
  test.affiche = function() {
    var champ = Number(document.getElementById("champSaisie").value);
    alert(Number(champ + 4));
  };
  document.getElementById("calc").addEventListener("click", test.affiche);
}

Init();
&#13;
<p>
  <label for="champSaisie">Saisissez un nombre&nbsp;:</label>
  <input type="text" id="champSaisie">
</p>
<p>
  <input id="calc" type="submit" value="Effectuer le calcul">
</p>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

test 本地到函数Init。您无法在事件处理程序(onclick="test.affiche()")中访问它,因为它不是全局的。

在此示例中,没有理由将代码置于Init内,您可以直接放入

var test= new Object;
test.affiche= function()
{
  var champ=Number(document.getElementById("champSaisie").value);
  alert(Number(champ+4));
};

进入<script>。这将使test全局化。在创建对象之前等待页面加载没有任何好处。

您也可以Init内部create a global variable

但是,更好的解决方案可能是避免使用全局变量bind the event handler inside Init而不是使用内联事件处理程序。

相关:What is the scope of variables in JavaScript?