document.getElementById(“someid”)。innerHTML =“HI”;对我不起作用

时间:2011-11-28 11:44:33

标签: javascript dom timer scope getelementbyid

我不明白如何很好地操纵DOM。我用过

document.getElementById('someid').innerHTML = "HI";

在其他地方,它工作正常。但是当我在我的网页上添加一个计时器时,我无法使用上面的内容来更改某些文本(计时器)。所以......我很困惑。你们在我遇到的其他问题上帮助了我...我在讨厌你之前研究了很多但是我很难过。沮丧。

signupForm.php中的

- SNIPPIT

<title>Perry Computer Services - Signup</title>
<script src="js/commonUtils.js" type="text/javascript"></script>
<script src="js/validation.js" type="text/javascript"></script>
<script src="js/timers.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">window.onload = CreateTimer(30);</script>
在timers.js中

function CreateTimer(Time)
{
  alert("Timer created:" + Time);
  document.getElementById('debug1').innerHTML = "WORKS";
  alert("We never get here.");
}
signupForm.php中的

- SNIPPIT

<form name="form1" method="post" action="signupForm.php?calling_page=validateform" accept-charset="utf-8">
  <table border="0" align="center">
    <tr class="table_top">
      <td class="tbl_col1"><div align="right" id="debug1"></div></td>
      <td class="tbl_col2"><div align="left" id="debug2"></div></td>

这是我很困惑的事情。我有另一个名为validation.js的.js文件,我在上面使用完全相同的document.getElementById,它可以工作!我不明白!

在validation.js中我经常修改DOM,效果很好!是否有效,因为当我通过Tab键更改字段到下一个字段 这是一个SCOPE问题吗? 如果有人不知道我做错了什么我会试着砍掉我的validation.js并把它粘在这里,但它很大。为什么1个函数可以工作而另一个文件在另一个文件中不起作用?

2 个答案:

答案 0 :(得分:4)

您立即致电CreateTimer 并将其返回值(undefined)分配给onload

在您调用它时,具有指定ID的元素不存在,并且该行发生错误并阻止脚本继续运行。

功能分配给onload。

 window.onload = function () { CreateTimer(30); };

答案 1 :(得分:1)

这是一个时间问题。请注意,警报时页面是空白的,并且还注意到如果从控制台运行命令后一切正常。您正在尝试修改尚未加载的元素。原因是onload没有正确设置 - 你在适当的时间之前调用了CreateTimer。

当你遇到这些问题时,试图找出问题的哪一部分是大问题会有所帮助。例如:

alert("Timer created:" + Time);
alert(document.getElementById('debug1'));
alert(document.getElementById('debug1').innerHTML);

此外,使用console.log()代替alert()也可以为您节省一些挫折感。