Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.08.2011, 14:54
Новичок на форуме
Отправить личное сообщение для sstasv Посмотреть профиль Найти все сообщения от sstasv
 
Регистрация: 31.08.2011
Сообщений: 3

тело функции работает только при наличии 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>


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

таким образом пытался достичь эффекта мигающих точек, как будто идет загрузка.
Ответить с цитированием
  #2 (permalink)  
Старый 31.08.2011, 15:07
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от sstasv
document.all.point2.style.visibility="visible";
Выкиньте ваш учебник по js в мусорку и почитайте Фленагана, например.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #3 (permalink)  
Старый 31.08.2011, 15:10
Новичок на форуме
Отправить личное сообщение для sstasv Посмотреть профиль Найти все сообщения от sstasv
 
Регистрация: 31.08.2011
Сообщений: 3

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

спасибо за совет, но мне интересны лишь ответы по теме.
Ответить с цитированием
  #4 (permalink)  
Старый 31.08.2011, 15:42
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

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
Ответить с цитированием
  #5 (permalink)  
Старый 31.08.2011, 15:42
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от sstasv
setTimeout(cycle(),2000);
Не нужно вызывать функцию, нужно передать ссылку на нее:
setTimeout(cycle,2000);
Ответить с цитированием
  #6 (permalink)  
Старый 31.08.2011, 16:12
Новичок на форуме
Отправить личное сообщение для sstasv Посмотреть профиль Найти все сообщения от sstasv
 
Регистрация: 31.08.2011
Сообщений: 3

Сообщение от melky Посмотреть сообщение
setTimeout(*!*cycle()*/!*,2000);

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

Сообщение от melky Посмотреть сообщение
и ещё : ваш код не будет работать в FireFox, потому что там нету document.all
может быть так и не должно быть, но у меня в линуксовом firefox 5.0 исправленный код работает.
Ответить с цитированием
  #7 (permalink)  
Старый 31.08.2011, 16:15
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

document.all Deprecated. смотрите сами
вашему скрипту осталось жизни на одно обновление
Ответить с цитированием
  #8 (permalink)  
Старый 31.08.2011, 20:05
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от melky
потому что там нету document.all
К этому относился мой комментарий...
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт работает только если подключать js в самом низу html! Pekkonen jQuery 3 26.01.2011 01:44
javascript не работает только на Мазиле? bashklip Firefox/Mozilla 1 17.04.2010 15:10
Dojo может подгружать информацию из пунктов меню только при клике на выбранный пункт? vlad275 Dojo toolkit 0 30.10.2008 15:56
DatePicker не работает при сипользование innerHTML AJlekceu jQuery 2 26.10.2008 17:49
FireFox: onmouseover не работает при зажатой кнопке мыши no. Общие вопросы Javascript 4 19.08.2008 13:43