Domanda

Ciao maestri di sviluppo Web, per prima cosa voglio dire che non credevo nei miei occhi - ho un pezzo di javascript che funziona perfettamente su IE7 e non su Firefox !!! :)))) Era uno scherzo. :) Quindi ti ho già detto il problema (non era uno scherzo), ora sto incollando il 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>

Questo è uno script molto vecchio, lo so. Prende il tempo rimanente della mia canzone, dal mio winamp e dai conti alla rovescia sul sito. Ma come ho detto, non funziona in Firefox.

Il corpo e il codice che chiama il conto alla rovescia è simile al seguente:

<body class="playlist_body" onLoad="recalc();display();">

Time Left In Song: <INPUT align="center" TYPE="text" Name="thetime" size=5 />

</body>

// Modifica: guardo FireBug e ho visto il seguente errore:

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
È stato utile?

Soluzione

Il problema è che sta accedendo agli elementi DOM per nome.

Aggiungi il codice seguente all'inizio per dichiarare una variabile per l'elemento thetime , aggiungi id = " thetime " a INPUT e aggiungi una chiamata a init (); in onload nell'elemento body .

var thetime;

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

A proposito, puoi sostituire la casella di testo con un normale elemento DIV impostando l'ID div su thetime e sostituendo thetime.value con thetime.innerHTML .

Inoltre, è meglio chiamare setTimeout con una funzione anziché una stringa; è necessario sostituire " display (); " e " recalc (); " con display e recalc rispettivamente.

Altri suggerimenti

IE ha una funzione "quotata" dove un elemento con un attributo name è posizionato nell'oggetto window, ad es.

<div name=foo></div>

Ti darà una variabile " pippo " - questo non è standard, dovresti farlo

document.getElementByName("foo") 

Per ottenere l'elemento di output del timer.

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

e aggiungi id = " thetime " anziché solo name = " thetime " all'input

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top