problema estranho com o código de JavaScript
-
05-07-2019 - |
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
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