2009-10-23 94 views
2

嗨网站开发大师, 首先我想说我不相信我的眼睛 - 我有一块JavaScript在IE7中工作得很好,并且不在Firefox中! :))))这是一个小笑话。 :) 所以我已经告诉过你这个问题(这不是开玩笑),现在我粘贴的javascript: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> 

//编辑:我看萤火,我看到了以下错误:

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 
+2

你得到在Firefox的JavaScript控制台的任何错误,或Firebug控制台? – jason 2009-10-23 02:26:35

+0

多少愚蠢我可以是有时!我忘了看看FireBug!是的,它给了错误。我正在编辑我的问题与它的错误!谢谢杰森! :) – Spoonk 2009-10-23 02:30:19

+0

那么当你正确定义'thetime'会发生什么? – 2009-10-23 02:34:57

回答

3

的问题是,它的按名称访问DOM元素。

下面的代码添加到顶部声明变量为thetime元素中,添加id="thetime"INPUT,并在onloadbody元素添加到init();的呼叫。

var thetime; 

function init() { 
    thetime = document.getElementById('thetime'); 
} 

顺便说一句,你可以通过div的ID设置为thetime,并与thetime.innerHTML更换thetime.value与常规DIV元素替换文本框。

另外,最好用函数而不是字符串来调用setTimeout;您应该分别替换"display();""recalc();"分别与displayrecalc

+0

呃...它看起来像一个聪明的决定,但...它不会跟我说话没有。如果...我可能会要求你对我表示怀疑...... – Spoonk 2009-10-23 02:39:50

+1

当你尝试时会发生什么?确保你在'onload ='的开头添加了'init();'。 – SLaks 2009-10-23 02:56:36

+0

DAMN !!!它不会工作,因为我添加了init();经过重新计算和显示!现在,当你告诉我,将它添加到开始,它的作品只是罚款!非常感谢!:)) – Spoonk 2009-10-23 03:04:50

3

IE有一个“特征”,其中带有name属性的元素放置在窗口对象中,例如。

<div name=foo></div> 

会给你一个变量“富” - 这是不规范的,你应该做的

document.getElementByName("foo") 

为了得到定时器输出元素。

+0

这将是document.getElementsByName( “foo” 的)[0]。 “getElementByName”不是一个函数 – 2009-10-23 02:37:07

+0

我不明白什么...我很牛逼这个... :( – Spoonk 2009-10-23 02:49:33

0
var thetime = document.getElementById("thetime"); 

,并添加ID = “thetime”,而不是仅仅NAME = “thetime” 到输入

+0

这将失败,因为该元素将尚未退出。 – SLaks 2009-10-23 02:36:03

+1

这取决于你在哪里做。 – 2009-10-23 02:37:41

+0

这并不在所有的作品... – Spoonk 2009-10-23 02:50:07