Pregunta

Hola Maestros de Desarrollo Web, Primero quiero decir que no creía en mis ojos. Tengo un trozo de javascript que funciona bien en IE7, ¡y no en Firefox! :)))) Esa fue una pequeña broma. :) Así que ya te dije el problema (no era broma), ahora estoy pegando el 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 es un script muy antiguo, lo sé. Toma mi tiempo de canción restante actual, de mi winamp y cuenta atrás en el sitio. Pero como dije, no funciona en Firefox.

El cuerpo y el código que llaman al temporizador de cuenta regresiva se ve así:

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

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

</body>

// Editar: miro FireBug y vi el siguiente error:

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
¿Fue útil?

Solución

El problema es que está accediendo a los elementos del DOM por su nombre.

Agregue el siguiente código en la parte superior para declarar una variable para el elemento thetime , agregue id = " thetime " a INPUT y agregue una llamada a init (); en onload en el elemento body .

var thetime;

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

Por cierto, puede reemplazar el cuadro de texto con un elemento DIV regular si establece el ID de div en thetime , y reemplaza thetime.value con thetime.innerHTML .

Además, es mejor llamar a setTimeout con una función en lugar de una cadena; debe reemplazar " display (); " y " recalc (); " con display y recalc respectivamente.

Otros consejos

IE tiene una función " " donde un elemento con un atributo de nombre se coloca en el objeto de la ventana, por ejemplo,

<div name=foo></div>

Te dará una variable " foo " - Esto no es estándar, deberías hacerlo

document.getElementByName("foo") 

Para obtener el elemento de salida del temporizador.

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

y agrega id = " thetime " en lugar de solo nombre = " tiempo " a la entrada

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top