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
War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top