опять про 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, время: 10:24. |