опять про 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);
}
}
}
|
|
да. действительно.
Цитата:
сейчас кое-что попробую. |
конечное решение:
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. Цитата:
|
кстати не понятно. возьмем такой пример.
<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 чем он отличается от моего первого "не работающего"? |
В первом переменная i изменяется и на момент выполнения функции, переданной в setTimeout, имеет совсем другое значение.
|
а почему тогда браузер проругался что stat_type.options[i] is undefined а не выдал результат, соответствующий последнему значению переменно i?
|
for (var i=0; i<5; i++) alert(i);
alert('i= '+i);
Посмотри что выдаст такой скрипт, может сам поймёшь... |
почему-то мне кажется, что там будет i=4. сейчас проверю.
а не. всё верно i=5. значение ведь сперва увеличивается а потом уже проверяется условие. |
Цитата:
если так, то как бы он тогда с этим условием вошел в замыкание? если оно выполняется при i == i<stat_type.options.length-1 (по крайней мере я думаю что это так) |
Цитата:
В данном примере наоборот: i увеличивается когда отработали все операторы. |
AzriMan,
twolf, оба сообщения -- бред, сотрите, пока мало кто видел :) |
полез в мануалы.
Цитата:
Цитата:
|
for (var i = 0; i < 5; ++i)
console.log(i);
for (var i = 0; i < 5; i++)
console.log(i);
Чувствуете разницу? И я не чувствую. Вы не про инкремент читайте, а про цикл for. |
тогда совершенно непонятно почему пишут, что инкремент именно после переменной, раз никакой разницы нет.
|
Как работает цикл for:
1. выполняется блок инициализации 2. выполняется блок условия, если ложно, то выходим из цикла 3. выполняется тело цикла 4. выполняется третий блок (хз как его назвать) 5. возвращаемся к п.2 Вот если цикл будет такого вида.
for (var i = 5; --i;)
console.log(i)
for (var i = 5; i--;)
console.log(i)
то будет разница. |
третий блок - это где изменяется счетчик?
тогда почему он выполняется после тела цикла? |
Цитата:
|
Цитата:
// 0 123 123 1 4
for ( ( alert(0), i = 0 ); ( alert(1), i < 2 ); ( alert(3), i++ ) ) {
alert(2);
}
alert(4);
|
| Часовой пояс GMT +3, время: 00:07. |