Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.04.2009, 17:55
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

опять про setTimeout
простенький скрипт.
'123' появляется ровно столько раз сколько выполняется условие [i]stat_type.options.selected==true
alert функции testInterval не вызывается. что может быть не так?

function testInterval(param)
{
	alert(param);
}


function form_getData ()
{
	var stat_type	= document.getElementsByName("stat_type")[0];
	for (i=0; i<stat_type.options.length; i++)
	{
		if (stat_type.options[i].selected==true)
		{
			var someresult = setTimeout(function(){
				alert(123);
				testInterval(stat_type.options[i].value);
				alert("after"); 
			}, 1000);
		}
	}
}
Ответить с цитированием
  #2 (permalink)  
Старый 15.04.2009, 17:57
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

AzriMan,
а консоль ошибок еще не нашли?

http://javascript.ru/tutorial/basic/...ispol-zovaniia
Ответить с цитированием
  #3 (permalink)  
Старый 15.04.2009, 18:16
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

да. действительно.
Цитата:
Error: stat_type.options[i] is undefined
Source File: http://xxx.yy/paaath/to/file/export_engine.php
Line: 356
в консоль ошибок браузера редко смотрю. в основном было достаточно firebug-а.
сейчас кое-что попробую.
Ответить с цитированием
  #4 (permalink)  
Старый 15.04.2009, 18:23
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

конечное решение:
function testInterval(param)
{
	alert("simple text");
	alert(param);
}


function form_getData ()
{
	var stat_type	= document.getElementsByName("stat_type")[0];

	stat_type_len = stat_type.options.length;
	for (i=0; i<stat_type_len; i++)
	{
		if (stat_type.options[i].selected==true)
		{
			//alert(stat_type.options[i].value);
			var someresult = setTimeout(function(obj){
				return function() {
					alert(123);
					testInterval(obj);
					alert("after"); 
				}
			}(stat_type.options[i].value), 5000);
		}
	}
}


спасибо за помощь.

p.s.
Цитата:
Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его Kolyaj.
вот блин кто окажется промежуточным звеном?
Ответить с цитированием
  #5 (permalink)  
Старый 15.04.2009, 18:45
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

кстати не понятно. возьмем такой пример.
<head>
<script type="text/javascript">
    function f()
    {
        var x = document.getElementById('div');
        setTimeout(function() { alert(x.innerHTML) }, 1000);
    }
</script>
</head>
<body onload="f()">
<div id='div'>123</div>
</body>


it w-o-r-k-s

чем он отличается от моего первого "не работающего"?
Ответить с цитированием
  #6 (permalink)  
Старый 15.04.2009, 18:49
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

В первом переменная i изменяется и на момент выполнения функции, переданной в setTimeout, имеет совсем другое значение.
Ответить с цитированием
  #7 (permalink)  
Старый 15.04.2009, 18:55
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

а почему тогда браузер проругался что stat_type.options[i] is undefined а не выдал результат, соответствующий последнему значению переменно i?
Ответить с цитированием
  #8 (permalink)  
Старый 15.04.2009, 19:00
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

for (var i=0; i<5; i++) alert(i);
alert('i= '+i);


Посмотри что выдаст такой скрипт, может сам поймёшь...
Ответить с цитированием
  #9 (permalink)  
Старый 15.04.2009, 19:04
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

почему-то мне кажется, что там будет i=4. сейчас проверю.

а не. всё верно i=5. значение ведь сперва увеличивается а потом уже проверяется условие.
Ответить с цитированием
  #10 (permalink)  
Старый 16.04.2009, 09:36
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

Сообщение от ZoNT Посмотреть сообщение
for (var i=0; i<5; i++) alert(i);
alert('i= '+i);


Посмотри что выдаст такой скрипт, может сам поймёшь...
ты имеешь ввиду что i==stat_type.options.length и поэтому тот элемент был не найден?

если так, то как бы он тогда с этим условием вошел в замыкание? если оно выполняется при i == i<stat_type.options.length-1 (по крайней мере я думаю что это так)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос: И опять про offsetLeft... sigurd Общие вопросы Javascript 11 04.10.2010 14:06
setTimeout и др. Destrifer Общие вопросы Javascript 15 10.02.2009 22:09
setTimeout Воитель Общие вопросы Javascript 5 23.01.2009 10:36
Использование метода setTimeout News Общие вопросы Javascript 3 18.09.2008 20:37
setTimeout object Общие вопросы Javascript 0 12.04.2008 05:26