Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   как отображать результаты скрипта немедленно, а не после завершения всей функции? (https://javascript.ru/forum/dom-window/49792-kak-otobrazhat-rezultaty-skripta-nemedlenno-ne-posle-zaversheniya-vsejj-funkcii.html)

sitar32 28.08.2014 14:54

как отображать результаты скрипта немедленно, а не после завершения всей функции?
 
Подскажите пожалуйста как сделать динамический вывод содержания страницы. У меня есть страница, в ней div и этот div я меняю в скрипте, но результат изменения виден только после того как скрипт отработал. А мне нужно чтобы результат показывался в процессе работы скрипта.

Файл index.html:

<html>
  <head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript" src="js/sc-1.js"></script>
    <link rel="stylesheet" type="text/css" href="bot.css">
  </head>
  <body>
    <button onclick="swdiv();">test for</button>

    <div id="scriptresult">
      Ready to work!
    </div>

    </body>
</html>


Файл sc-1.js
function wait(msecs)
{
          var start = new Date().getTime();
          var cur = start
          while(cur - start < msecs)
          {
                    cur = new Date().getTime();
          }	
}

function swdiv()
{
          $("div#scriptresult").html("loading .");
          wait(1000);
          $("div#scriptresult").html("loading ..");
          wait(1000);
          $("div#scriptresult").html("loading ...");

}


После нажатия на кнопку, показывается только третье сообщение, без первых двух.

BETEPAH 28.08.2014 15:26

http://javascript.ru/setTimeout

Aetae 28.08.2014 15:45

Потому что ваша функция wait - ̜̣̳̘̦̫̘ͤ͊̊͐͑̅е̠ͦ̓̍̆ͤ ̼͉̟͑͂̄̓̈р͕̣̿ͥͥ ̥̲̻͕͙̓̏́̚е̪ͮ̏̒͒̍ͨ ͖͔̹̲̮͎̖̐ͮͩ̐̍̍с̥̼̤̒ͬ̑ͬ͗̉ͫ ̞̺̗̲̹̯̪͎̥ͤ̉ͩ̔̚ь̘̞ͦ̅ ̝͈̹͕̝͉͙͚̐ͩ!̰͎̣̭̮̦̳̠̞ͯ̿̂͐̀

sitar32 28.08.2014 16:32

Цитата:

Сообщение от BETEPAH (Сообщение 327941)

это не работает.

изменил код:
function printdiv(pvalue)
{
          $("div#scriptresult").html("loading " + pvalue);

}


function swdiv()
{
          //timeout_id = window.setTimeout($("div#scriptresult").html("loading ."),1);
          // document.getElementById("scriptresult").innerHTML="start .....";
          //wait(2000);
          window.setTimeout(printdiv("1"),10000);
          window.setTimeout(printdiv("2"),20000);
          window.setTimeout(printdiv("3"),30000);

}


теперь при нажатии на кнопку, сразу выводится сообщение "loading 3"

sitar32 28.08.2014 16:34

Цитата:

Сообщение от Aetae (Сообщение 327947)
Потому что ваша функция wait - ̜̣̳̘̦̫̘ͤ͊̊͐͑̅е̠ͦ̓̍̆ͤ ̼͉̟͑͂̄̓̈р͕̣̿ͥͥ ̥̲̻͕͙̓̏́̚е̪ͮ̏̒͒̍ͨ ͖͔̹̲̮͎̖̐ͮͩ̐̍̍с̥̼̤̒ͬ̑ͬ͗̉ͫ ̞̺̗̲̹̯̪͎̥ͤ̉ͩ̔̚ь̘̞ͦ̅ ̝͈̹͕̝͉͙͚̐ͩ!̰͎̣̭̮̦̳̠̞ͯ̿̂͐̀

да дело не в функции wait. результат работы скрипта отображается только после завершения скрипта. но не в процессе. этот код я сгеренировал для примера.

Aetae 28.08.2014 17:18

sitar32, парень, ты не понимаешь js. Совсем.
Вот что по твоему делает этот код?
window.setTimeout(printdiv("1"),30000);

Так вот, на самом деле он сразу вызывает printdiv с аргументом "1" и передаёт в setTimeout результат вызова функции.(в данном случае undefined) Через 30 секунд вызовется ничто(undefined) и ничего не произойдёт само собой.

sitar32 28.08.2014 18:27

Спасибо большое за помощь, разобрался.
Всем +1 к карме =)


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