我想在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 : </label><input type="text" id="champSaisie"></p>
<p><input type="submit" onclick="test.affiche()" value="Effectuer le calcul"></p>
</body></html>
答案 0 :(得分:3)
您正在创建的变量test
local 到您的Init
函数。
当您尝试访问test
处理程序中的onclick
时,它正在全球级别查找test
,该级别不存在
我已将您的代码更新为使用addEventListener
。
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 :</label>
<input type="text" id="champSaisie">
</p>
<p>
<input id="calc" type="submit" value="Effectuer le calcul">
</p>
&#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
而不是使用内联事件处理程序。