Pergunta

Oi Masters Of Desenvolvimento Web, primeiro eu quero dizer que eu não acreditava nos meus olhos - Eu tenho um pedaço de javascript que funciona muito bem no IE7, e não fazer no Firefox !!! :)))) Isso foi brincadeira. :) Então, eu já lhe disse o problema (que não era piada), agora estou colando o 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>

Este é muito antiga roteiro eu sei disso. Leva meu atual momento canção restante, do meu Winamp e contagens regressivas no site. Mas como eu disse, ele não funciona no Firefox.

Corpo e código que chama temporizador de contagem regressiva esta aparência:

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

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

</body>

// Edit: Eu olho para FireBug, e eu vi o seguinte erro:

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
Foi útil?

Solução

O problema é que ele está acessando elementos DOM pelo nome.

Adicione o seguinte código à parte superior para declarar uma variável para o elemento thetime, adicione id="thetime" ao INPUT, e adicione uma chamada para init(); em onload no elemento body.

var thetime;

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

A propósito, você pode substituir a caixa de texto com um elemento DIV regulares, definindo ID do div para thetime, e substituindo thetime.value com thetime.innerHTML.

Além disso, é melhor chamar setTimeout com uma função em vez de uma string; você deve substituir "display();" e "recalc();" com display e recalc respectivamente.

Outras dicas

IE tem uma "funcionalidade", onde um elemento com um atributo nome é colocado no objecto de janela, por exemplo.

<div name=foo></div>

Vamos dar-lhe uma variável "foo" - este é não-padrão, você deve fazer

document.getElementByName("foo") 

Para obter o elemento de saída do temporizador.

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

e adicione id = "thetime" em vez de apenas name = "thetime" para a entrada

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top