Seltsames Problem mit JavaScript-Code
-
05-07-2019 - |
Frage
Hallo Masters Of Web-Entwicklung, zunächst möchte ich sagen, dass ich nicht in meinen Augen glaubte - ich ein Stück Javascript haben, die ganz gut in IE7 funktioniert und nicht in Firefox !!! :)))) Das war wenig Witz. :) Also erzählte ich Ihnen schon das Problem (es war nicht scherzen), jetzt bin ich einfügen 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>
Das ist sehr alte Schrift weiß ich. Es nimmt meine aktuellen Rest Song Zeit, von meinem winamp und Countdowns in Ort. Aber wie gesagt, es nicht in Firefox arbeiten.
Body und Code, Countdown-Timer ruft sieht wie folgt aus:
<body class="playlist_body" onLoad="recalc();display();">
Time Left In Song: <INPUT align="center" TYPE="text" Name="thetime" size=5 />
</body>
// Edit: Ich sehe FireBug, und ich sah die folgenden Fehler:
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
Lösung
Das Problem ist, dass es DOM-Elemente mit Namen zugreift.
In der oben den folgenden Code eine Variable für das thetime
Element zu deklarieren, fügt id="thetime"
zum INPUT
, und fügen Sie einen Anruf in init();
im onload
Elemente body
.
var thetime;
function init() {
thetime = document.getElementById('thetime');
}
Durch die Art und Weise, können Sie das Textfeld mit einem regelmäßigen DIV
Elemente ersetzen durch die div
der Einstellung ID thetime
und Ersetzen thetime.value
mit thetime.innerHTML
.
Außerdem ist es besser SetTimeout mit einer Funktion anstelle einer Zeichenfolge zu nennen; Sie sollten jeweils "display();"
und "recalc();"
mit display
und recalc
ersetzen.
Andere Tipps
IE hat ein „Feature“, wo ein Element mit einem Namensattribut wird in dem Fenster Objekt platziert, zum Beispiel.
<div name=foo></div>
geben Sie eine Variable "foo" - das ist nicht Standard, sollten Sie tun,
document.getElementByName("foo")
Um das Timer Ausgangselement zu erhalten.
var thetime = document.getElementById("thetime");
und id = "thetime" statt nur name = "thetime" an den Eingang