2009-10-23 90 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