JavaScript代码存在奇怪问题
-
05-07-2019 - |
题
Hi Webters of Web Development, 首先,我想说我不相信我的眼睛 - 我有一段javascript在IE7中工作得很好,而且不在Firefox中! :))))那是一个小笑话。 :) 所以我已经告诉你这个问题(这不是玩笑),现在我正在粘贴javascript:
<script type="text/javascript">
<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->
<!-- Begin
var ms;
ms = %%CONTENT_REFRESH%% - 5;
var stop;
stop = 0;
var myvalue;
function display() {
if (!stop) {
setTimeout("display();", 1000);
}
thetime.value = myvalue;
}
function recalc() {
var hours;
var minutes;
var seconds;
ms = ms - 1;
hours = Math.floor(ms / 3600);
minutes = Math.floor(ms / 60);
if (minutes < 10) {
minutes = "0"+minutes;
}
seconds = ms - (minutes*60) - (hours*3600);
if (seconds < 10) {
seconds = "0"+seconds;
}
myvalue = hours+":"+minutes+":"+seconds;
thetime.value = myvalue;
if (myvalue == "0:00:00") {
stop = 1;
}
if (!stop) {
setTimeout("recalc();", 1000);
}
}
// End -->
</SCRIPT>
这是我知道的非常古老的剧本。这需要我现在剩余的歌曲时间,从我的winamp和网站倒计时。但正如我所说,它在Firefox中不起作用。
调用倒数计时器的正文和代码如下所示:
<body class="playlist_body" onLoad="recalc();display();">
Time Left In Song: <INPUT align="center" TYPE="text" Name="thetime" size=5 />
</body>
//编辑:我看看FireBug,我看到了以下错误:
thetime is not defined
recalc()playlist.cgi (line 87)
function onload(event) { recalc(); display(); }(load )1 (line 2)
error source line: [Break on this error] thetime.value = myvalue;\n
解决方案
问题在于它是按名称访问DOM元素。
将以下代码添加到顶部以声明 thetime
元素的变量,将 id =&quot; thetime&quot;
添加到 INPUT
,并在 body
元素的 onload
中添加对 init();
的调用。
var thetime;
function init() {
thetime = document.getElementById('thetime');
}
顺便说一下,您可以通过将 div
的ID设置为 thetime
来替换带有常规 DIV
元素的文本框,并替换使用 thetime.innerHTML
thetime.value
。
另外,最好用函数而不是字符串调用setTimeout;你应该将&quot; display();&quot;
和&quot; recalc();&quot;
替换为 display
和 recalc 代码>分别。
其他提示
IE具有“特征”功能。其中具有name属性的元素放置在window对象中,例如
<div name=foo></div>
会给你一个变量“foo” - 这是非标准的,你应该做
document.getElementByName("foo")
获取计时器输出元素。
var thetime = document.getElementById("thetime");
并添加id =&quot; thetime&quot;而不只是name =&quot; thetime&quot;到输入
不隶属于 StackOverflow