Странная проблема с кодом JavaScript
-
05-07-2019 - |
Вопрос
Привет мастера веб-разработки, Во-первых, я хочу сказать, что я не верил своим глазам - у меня есть фрагмент JavaScript, который прекрасно работает в IE7, а в Firefox - нет! :)))) Это была маленькая шутка. :) Итак, я уже говорил вам о проблеме (это была не шутка), теперь я вставляю 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>
Это очень старый сценарий, я это знаю. Это берет мое текущее оставшееся время песни, от моего winamp и отсчетов на сайте. Но, как я уже сказал, это не работает в Firefox.
Тело и код, который вызывает таймер обратного отсчета, выглядит следующим образом:
<body class="playlist_body" onLoad="recalc();display();">
Time Left In Song: <INPUT align="center" TYPE="text" Name="thetime" size=5 />
</body>
// Редактировать: я смотрю на FireBug и вижу следующую ошибку:
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
Решение
Проблема в том, что он обращается к элементам DOM по имени.
Добавьте следующий код в начало страницы, чтобы объявить переменную для элемента thetime
, добавьте id = " thetime "
в INPUT
и добавьте вызов init ();
в onload
в элементе body
. Р>
var thetime;
function init() {
thetime = document.getElementById('thetime');
}
<Ч>
Кстати, вы можете заменить текстовое поле обычным элементом DIV
, установив для идентификатора div
значение thetime
и заменив его thetime.value
с thetime.innerHTML
.
Кроме того, лучше вызывать setTimeout с функцией вместо строки; Вы должны заменить " display (); "
и "recalc (); "
на display
и recalc код> соответственно.
Другие советы
IE имеет «функцию» где элемент с атрибутом имени помещен в объект окна, например.
<div name=foo></div>
Даст вам переменную " foo " - это нестандартно, вы должны сделать
document.getElementByName("foo")
Чтобы получить выходной элемент таймера.
var thetime = document.getElementById("thetime");
и добавьте id = " thetime " вместо просто name = " thetime " на вход