Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   опять про setTimeout (https://javascript.ru/forum/misc/3397-opyat-pro-settimeout.html)

AzriMan 15.04.2009 17:55

опять про 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);
		}
	}
}

Kolyaj 15.04.2009 17:57

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

http://javascript.ru/tutorial/basic/...ispol-zovaniia

AzriMan 15.04.2009 18:16

да. действительно.
Цитата:

Error: stat_type.options[i] is undefined
Source File: http://xxx.yy/paaath/to/file/export_engine.php
Line: 356
в консоль ошибок браузера редко смотрю. в основном было достаточно firebug-а.
сейчас кое-что попробую.

AzriMan 15.04.2009 18:23

конечное решение:
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.
вот блин :) кто окажется промежуточным звеном?

AzriMan 15.04.2009 18:45

кстати не понятно. возьмем такой пример.
<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

чем он отличается от моего первого "не работающего"?

Kolyaj 15.04.2009 18:49

В первом переменная i изменяется и на момент выполнения функции, переданной в setTimeout, имеет совсем другое значение.

AzriMan 15.04.2009 18:55

а почему тогда браузер проругался что stat_type.options[i] is undefined а не выдал результат, соответствующий последнему значению переменно i?

ZoNT 15.04.2009 19:00

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


Посмотри что выдаст такой скрипт, может сам поймёшь...

AzriMan 15.04.2009 19:04

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

а не. всё верно i=5. значение ведь сперва увеличивается а потом уже проверяется условие.

AzriMan 16.04.2009 09:36

Цитата:

Сообщение от ZoNT (Сообщение 16708)
for (var i=0; i<5; i++) alert(i);
alert('i= '+i);


Посмотри что выдаст такой скрипт, может сам поймёшь...

ты имеешь ввиду что i==stat_type.options.length и поэтому тот элемент был не найден?

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


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