Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменение innerHTML в цикле %) (https://javascript.ru/forum/misc/2428-izmenenie-innerhtml-v-cikle-%25.html)

Tror 24.12.2008 15:38

Изменение innerHTML в цикле %)
 
Добрый день :)

у меня есть кусок кода
<html>

<head>

<title></title>

<script type="text/javascript" language="javascript">
    function forit()
    {
        document.getElementById("www").innerHTML = "Beginning";
        for (var i = 0; i < 5000; i++)
        {
            document.getElementById("www").innerHTML = i;
        }
        document.getElementById("www").innerHTML = "Ending";
    }
</script>
</head>

<body>
<span id="www"></span>

<input type="button" value="click" onclick="forit()"/>
</body>

</html>


Будучи наивным по соей природе, я подумал что значение иннерХТМЛ будет меняться в цикле и будет видно сразу же, а в итоге получается что мы увидим только "Ending". Яваскриптом болею недавно, так что не серчайте. Если можно объясните, пожалуйста, как быть в таких случаях или можно кинуть ссылкой на какую нибудь умную статью.

Заранее спасибо свем откликнувшимся ;)

Tror 24.12.2008 15:39

странно как то парсер работает. не раскрасил первые строки функции %)
или может я что не так сделал?

ZoNT 24.12.2008 15:45

джаваскрипт отрабатывает намного быстрее, чем может отрисоваться изменение. Поэтому, если надо выводить что-то постепенно. то надо применять setTimeout или setInterval

Tror 24.12.2008 15:58

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

ZoNT 24.12.2008 16:08

ага

vk65535 24.12.2008 16:09

Это очень желательно сделать еще и потому, что браузер залипает при длинном цикле, а потом начинает задавать вопросы, навроде "скрипт зациклился - отключать?(да/нет)".

Tror 24.12.2008 16:11

мда.... серкрет счастья оказывается не совсем так прост как я думал :(
а жаль....

Tror 24.12.2008 16:26

собственно почему я взялся за такой вариант реализации: с самого начала я решил что во время исполнения моего скрипта юзеру будет показываться анимированный гиф имитирующий прогресс, НО ....... умнее всех как всегда оказался Internet Explorer. При выполнении сколько-нибудь продолжительного скрипта все анимированные гифы на страничке замирают. Причем только в осле. что с этим делать и если ли решения данной проблемы не смог найти. Может здесь что-нибудь слышали по этой теме?

ZoNT 24.12.2008 16:48

тебе уже сказали решение...

Tror 24.12.2008 16:53

про решение я уже понял. в последнем посте я просто поинтересовался по поводу проблемы в осле с гифами.

ZoNT 24.12.2008 17:04

проблема в осле... с гифами и со всем остальным...

Kolyaj 24.12.2008 17:09

Нет в осле никакой проблемы в данном случае. Какая вам разница, анимированные гифы или нет, если браузер завис?

Tror 24.12.2008 17:29

Kolyaj,
но во всех остальных браузерах все элементы страницы остаются функциональными и анимированные гифы не замерзают

Kolyaj 24.12.2008 17:54

Tror,
я повторю вопрос
Цитата:

Сообщение от Kolyaj
Какая вам разница, анимированные гифы или нет, если браузер завис?


Хотя дайте угадаю: вы событие на ссылку вешаете?

Tror 25.12.2008 09:49

оказалось, что на ссылку. попробовал менять ссылку на другие хтмл элементы. результат тот же....

Tror 25.12.2008 12:24

Kolyaj,
а в чем проблема с ссылками?

Kolyaj 25.12.2008 12:48

Такая ситуация обычно возникает, когда IE думает, что человек со страницы собрался уходить, а значит анимацию показывать зря не нужно.

Vesst 01.05.2012 13:43

Та же проблема
 
Помогите, та же проблема.
для упрощения проверил функцию
var i=0;

function govalue()
{
var t=document.getElementById("txt");
t.innerHTML=i;
}
function setValue()
{
while(i++<100)
setTimeout("govalue()",3500);
}


Функця ждет некоторое время, но явно меньше 3500*100 милисекунд
затем выдает 101.
Ну 101 то я поправлю, а вот как добиться чтобы цифры отображались каждый раз после изменения innerHTML?

9xakep 01.05.2012 14:40

<div id='div'></div>
<script>
var i = 0;
var inter = setInterval(function () {
document.getElementById('div').innerHTML = i
++i
document.getElementById('div').innerHTML==500 ? clearInterval(inter) : document.getElementById('div').innerHTML
},1)

</script>

Kolyaj 01.05.2012 20:19

Vesst,
setTimeout это не то же самое, что sleep.
http://alljs.ru/articles/timeout/overview#nosleep

Vesst 02.05.2012 09:03

То есть средствами javascript невозможно вывести повторяющуюся цепочку данных в цикле? я разочарован - буду перехлдить на другой язык.
Есть другой язык веб-разработки где такое возможно?

kobezzza 02.05.2012 11:50

Цитата:

Сообщение от Vesst (Сообщение 172320)
То есть средствами javascript невозможно вывести повторяющуюся цепочку данных в цикле? я разочарован - буду перехлдить на другой язык.
Есть другой язык веб-разработки где такое возможно?

Вам дали ответ на ваш вопрос ещё на первой странице. Хотя ок, переходите на другой язык. Одним быдлокодером JS станет меньше:)

9xakep 02.05.2012 12:02

Vesst,
ты дурак что ли? Я же тебе дал решение, как это можно сделать, ставь seтInterval и увеличивай i в нем, и проверяй если i равно какому то значению, то прекращай "псевдоцикл" :-/

melky 02.05.2012 21:41

Цитата:

Сообщение от Vesst (Сообщение 172320)
То есть средствами javascript невозможно вывести повторяющуюся цепочку данных в цикле? я разочарован - буду перехлдить на другой язык.
Есть другой язык веб-разработки где такое возможно?

в браузерном javascript

person 03.05.2012 06:36

В догонку можно тут посмотреть

Сортировка массива с отображением процесса


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