опять про 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 (по крайней мере я думаю что это так) |
Часовой пояс GMT +3, время: 01:57. |