Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   тело функции работает только при наличии alert (https://javascript.ru/forum/dom-window/21176-telo-funkcii-rabotaet-tolko-pri-nalichii-alert.html)

sstasv 31.08.2011 14:54

тело функции работает только при наличии alert
 
здравствуйте. вот одна часть кода:
<tr>
			<td>
			<div id=point1 style="visibility:visible; display:inline">.</div>
			<div id=point2 style="visibility:hidden; display:inline">.</div>
			<div id=point3 style="visibility:hidden; display:inline">.</div>
			</td>
</tr>


вот функция:
<script type="text/javascript">
	var vis1=1, vis2=0, vis3=0;
	function cycle() {
		if (vis1==1 && vis2==0) {
			alert("first");
			document.all.point2.style.visibility="visible";
			vis2=1;
			setTimeout(cycle(),2000);
		} else if (vis1==1 && vis2==1 && vis3==0) {
			alert("second");
			document.all.point3.style.visibility="visible";
			vis3=1;
			setTimeout(cycle(),2000);
		} else if (vis1==1 && vis2==1 && vis3==1) {
			alert("3-d");
			document.all.point1.style.visibility="hidden";
			document.all.point2.style.visibility="hidden";
			document.all.point3.style.visibility="hidden";
			vis1=0;
			vis2=0;
			vis3=0;
			setTimeout(cycle(),2000);
		} else if (vis1==0) {
			alert("4-d");
			document.all.point1.style.visibility="visible";
			vis1=1;
			setTimeout(cycle(),2000);
		}
	}
</script>


вызов функции происходит в самом конце кода перед </body> таким образом:

<script type="text/javascript">cycle();</script>


объясниите мне пожалуйста ничего не понимающему, почему функция отказывается работать без алертов. а вот с ними, бесконечно всплывающих на экранах, все работает прекрасно.

таким образом пытался достичь эффекта мигающих точек, как будто идет загрузка.

trikadin 31.08.2011 15:07

Цитата:

Сообщение от sstasv
document.all.point2.style.visibility="visible";

Выкиньте ваш учебник по js в мусорку и почитайте Фленагана, например.

sstasv 31.08.2011 15:10

Цитата:

Сообщение от trikadin (Сообщение 123844)
Выкиньте ваш учебник по js в мусорку и почитайте Фленагана, например.


спасибо за совет, но мне интересны лишь ответы по теме.

melky 31.08.2011 15:42

setTimeout(*!*cycle()*/!*,2000);

вы вызываете функцию сразу, а не откладываете её вызов на 2 сек. уберите скобки.

document.all.point1
document.all.point2
document.all.point3

ШТО?. вы не могли бы закешировать элементы в переменной ?
var point1 = document.all.point1;


и ещё : ваш код не будет работать в FireFox, потому что там нету document.all
alert( typeof document.all ); // undefined

Sweet 31.08.2011 15:42

Цитата:

Сообщение от sstasv
setTimeout(cycle(),2000);

Не нужно вызывать функцию, нужно передать ссылку на нее:
setTimeout(cycle,2000);

sstasv 31.08.2011 16:12

Цитата:

Сообщение от melky (Сообщение 123856)
setTimeout(*!*cycle()*/!*,2000);

вы вызываете функцию сразу, а не откладываете её вызов на 2 сек. уберите скобки.

Цитата:

Сообщение от Sweet (Сообщение 123857)
Не нужно вызывать функцию, нужно передать ссылку на нее:
setTimeout(cycle,2000);

спасибо!!!

Цитата:

Сообщение от melky (Сообщение 123856)
и ещё : ваш код не будет работать в FireFox, потому что там нету document.all

может быть так и не должно быть, но у меня в линуксовом firefox 5.0 исправленный код работает.

melky 31.08.2011 16:15

document.all Deprecated. смотрите сами
вашему скрипту осталось жизни на одно обновление :)

trikadin 31.08.2011 20:05

Цитата:

Сообщение от melky
потому что там нету document.all

К этому относился мой комментарий...


Часовой пояс GMT +3, время: 07:11.