Question

Bonjour, Masters Of Web Development, D'abord, je tiens à dire que je ne croyais pas à mes yeux - j'ai un morceau de javascript qui fonctionne très bien dans IE7 et non dans Firefox !!! :)))) C'était une petite blague. :) Donc je vous ai déjà dit le problème (ce n'était pas une blague), maintenant je colle le 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>

C’est un très vieux script, je le sais. Cela prend le temps qu'il me reste de la chanson, de mon winamp et des comptes à rebours sur le site. Mais comme je l’ai dit, cela ne fonctionne pas dans Firefox.

Le corps et le code qui appelle le compte à rebours se présentent comme suit:

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

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

</body>

// Edit: je regarde FireBug et j'ai vu l'erreur suivante:

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
Était-ce utile?

La solution

Le problème est qu'il accède aux éléments DOM par leur nom.

Ajoutez le code suivant en haut pour déclarer une variable pour l'élément thetime , ajoutez id = "thetime & au INPUT et ajoutez un appel à init (); dans onload dans l'élément body .

var thetime;

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

Au fait, vous pouvez remplacer la zone de texte par un élément DIV normal en définissant l'ID de div sur thetime et en remplaçant thetime.value avec thetime.innerHTML .

De plus, il est préférable d'appeler setTimeout avec une fonction plutôt qu'une chaîne; vous devez remplacer "display ();" "et " recalc (); "" par display et recalc respectivement.

Autres conseils

IE possède une "fonctionnalité". où un élément avec un attribut name est placé dans l'objet window, par exemple.

<div name=foo></div>

Vous donnera une variable " foo " - ceci est non standard, vous devriez le faire

document.getElementByName("foo") 

Pour obtenir l'élément de sortie de la minuterie.

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

et ajoutez id = " thetime " au lieu de simplement name = " thetime " à l'entrée

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top