Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка в JS-скрипте, выводящем значение каждые 2.5 секунды
 
 автор: vania   (24.03.2007 в 19:40)   письмо автору
 
 

Мне нужно написать такой сценарий,чтоб после загрузки страницы выводилась переменная
qwe со значением 30, и чтоб каждые 2.5 секунды значению qwe прибавлялся 1 и выводилось на экран,
Вот мой сценарий:

<script language="JavaScript">
var qwe;
qwe=30;
function showtime() {
    qwe++;
}
setTimeout(showtime, 2500);
document.writeln(qwe);
</script>

Он почемуто неработает,объясните где ошибка?

   
 
 автор: ddhvvn   (24.03.2007 в 19:59)   письмо автору
 
   для: vania   (24.03.2007 в 19:40)
 

Во-первых, вместо setTimeout нужно вставить setInterval ...

   
 
 автор: CNT   (24.03.2007 в 20:24)   письмо автору
 
   для: vania   (24.03.2007 в 19:40)
 

1. метод write в программе можно использовать один раз. Вторичное использование этого метода переписывает сам объект document - вместе со всеми функциями, в изначальном документе прописанными.
2. логика в вашем примере нарушена полностью.
Надо приблизительно так:
<head>
<script language="JavaScript">
function showtime () {
document.getElementById ('timer1').value++;
setTimeout (showtime, 2500);
}
onload = showtime;
</script> 
</head>
<body>
<input id="timer1" style="border: none" value="29">
</body>

   
 
 автор: vania   (24.03.2007 в 23:56)   письмо автору
 
   для: CNT   (24.03.2007 в 20:24)
 

CNT, помоги написать такой скрипт,чтоб длинна таблицы с 30 каждые 2.5 секунды увеличивалась на 1,а то у мну чёто не получается

   
 
 автор: CNT   (25.03.2007 в 14:57)   письмо автору
 
   для: vania   (24.03.2007 в 23:56)
 

"длинна таблицы" - не знаю такого.

М.б., - "ширина таблицы"? Или же "высота таблицы"?
Или "ширина какой-то из ячеек таблицы"?
Или же "высота какой-то из ячеек таблицы"?
...
Как угадать-то?

   
 
 автор: vania   (25.03.2007 в 22:19)   письмо автору
 
   для: CNT   (25.03.2007 в 14:57)
 

Пусть будет ширина таблицы. Таблица состоит из одной ячейки

   
 
 автор: CNT   (25.03.2007 в 23:41)   письмо автору
 
   для: vania   (25.03.2007 в 22:19)
 

В коде, который выше, заменяете
document.getElementById ('timer1').value++;
на document.getElementById ('timer1').width++;

и <input id="timer1" style="border: none" value="29">
на <table id="timer1" border="1" width="345"><tr><th>Таблица</th></tr></table>

   
 
 автор: 12345   (26.03.2007 в 12:29)   письмо автору
 
   для: CNT   (25.03.2007 в 23:41)
 


<head> 
<script> 
function showtime () { ;
  document.getElementById ('timer2').style.width
  =(document.getElementById('timer1').value++)+'px';

onload = function(){showtime;setInterval(showtime, 2500);}
</script>  
</head> 
<body> 
<input id="timer1" style="border: none" value="29"><br>
<table id="timer2" border="1" cellpadding=0 style="width:29px"><tr><th>.</th></tr></table> 
</body> 

   
 
 автор: CNT   (26.03.2007 в 12:46)   письмо автору
 
   для: 12345   (26.03.2007 в 12:29)
 

ошибочка есть.
Обращение к функции без скобок вот здесь (выделено)
onload = function(){showtime;setInterval(showtime, 2500);} 
будет парсером проигнорировано.
Можете это проверить так:<script>

var A = 0, B;
function showtime () { 
if (!A) {window.status = B; A = 1}
  document.getElementById ('timer2').style.width
  =(document.getElementById('timer1').value++)+'px';

onload = function(){showtime; B = setInterval(showtime, 2500);}
</script>
В статусе при первом обращении к функции showtime переменная B уже будет определена - из чего следует, что первый вызов showtime не произошёл. А если пропишете скобки, то в статусе увидите undefined

   
 
 автор: bronenos   (25.03.2007 в 23:21)   письмо автору
 
   для: CNT   (24.03.2007 в 20:24)
 

setTimeout (showtime, 2000); <<< я такого не знаю, я вот знаю такое
setTimeout ('showtime()', 2000);

   
 
 автор: CNT   (25.03.2007 в 23:35)   письмо автору
 
   для: bronenos   (25.03.2007 в 23:21)
 

Теперь знать будете:-)

   
 
 автор: vania   (28.03.2007 в 02:50)   письмо автору
 
   для: CNT   (25.03.2007 в 23:35)
 

А можно усложнить сценарий таким образом,чтоб доходя до определенной величины (например 400), наращивание переменной останавливалось?

   
 
 автор: bronenos   (28.03.2007 в 08:39)   письмо автору
 
   для: vania   (28.03.2007 в 02:50)
 

if (i<400) i++;

   
 
 автор: CNT   (28.03.2007 в 10:51)   письмо автору
 
   для: vania   (28.03.2007 в 02:50)
 

Надо строку document.getElementById ('timer1').width++ заменить на
with (document.getElementById ('timer1')) if (width < 400) width++; else return;

   
 
 автор: vania   (29.03.2007 в 02:49)   письмо автору
 
   для: CNT   (28.03.2007 в 10:51)
 

Почему нельзя сделать,чтобы эти 2 скрипта работали одновременно?

<script language="JavaScript"> 
function showtime () { 
document.getElementById ('timer1').value++; 
setTimeout (showtime, 1000); 

onload = showtime; 
</script>  
<script language="JavaScript"> 
function showtable () { 
document.getElementById ('timer2').width++;
setTimeout (showtable, 2000); 

onload = showtable; 
</script> 
<input id="timer1" style="border: none" value="29">
<table id="timer2" border="1" width="345"><tr><th>Таблица</th></tr></table>

   
 
 автор: RMW   (29.03.2007 в 03:37)   письмо автору
 
   для: vania   (29.03.2007 в 02:49)
 

Попробуйте: onload=function(){showtime();showtable()}

   
 
 автор: CNT   (29.03.2007 в 10:17)   письмо автору
 
   для: RMW   (29.03.2007 в 03:37)
 

Можно так, как предложил RMW, а можно и объединить функции в одну:
<script language="JavaScript"> 
var R = 1;
function showtime ()

with (document)
   {
   getElementById ('timer1').value++; 
   if (R < 0) getElementById ('timer2').width++;
   }
R *= -1; setTimeout (showtime, 1000); 

onload = showtime;
</script>

   
 
 автор: bronenos   (29.03.2007 в 10:46)   письмо автору
 
   для: CNT   (29.03.2007 в 10:17)
 

что значит with?
судя по контексту это некий аналог
using namespace в С?

   
 
 автор: CNT   (29.03.2007 в 10:58)   письмо автору
 
   для: bronenos   (29.03.2007 в 10:46)
 

Нет, это не перевод имен в глобальное пространство.
Это просто форма записи, уменьшающая количество байт в коде - для С такая проблема не стоит, там код может быть какой угодно длины, потому как файлы С компилируются. А в JavaScript каждый лишний символ в коде увеличивает время загрузки и время отработки.
With - это Statement, устанавливающий "объект по умолчанию" для последующего (помещённого в фигурные скобки) блока операторов.
Например, следующую конструкцию:
document.getElementById ('best_of_the_bests').innerHTML = '<b>YES</b>';
document.getElementById ('best_of_the_bests').bgColor = '#556677';
document.getElementById ('best_of_the_bests').className = 'myClass';
document.getElementById ('best_of_the_bests').style.border = '1px red solid';

можно записать короче (используя меньше символов), с помощью with:
with (document.getElementById ('best_of_the_bests'))
   {
   innerHTML = '<b>YES</b>';
   bgColor = '#556677';
   className = 'myClass';
   style.border = '1px red solid';
   }

   
 
 автор: vania   (29.03.2007 в 16:28)   письмо автору
 
   для: CNT   (29.03.2007 в 10:58)
 

Мне надо,чтобы скрипты работали, каждый со своим интервалом "увеличения"

   
 
 автор: CNT   (29.03.2007 в 17:13)   письмо автору
 
   для: vania   (29.03.2007 в 16:28)
 

Они и так работают с разными интервалами - точно так, как и задано в условиях: число увеличивается в два раза быстрее, чем увеличивается ширина таблицы. Неужели, блин, не заметно?
Или же опять - "я не смотрел, но хочу сказать"?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования