Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с setTimeout или setInterval (https://javascript.ru/forum/misc/12559-pomogite-s-settimeout-ili-setinterval.html)

shureg 23.10.2010 11:43

Помогите с setTimeout или setInterval
 
Доброго времени суток, необпеределился что лучше использовать, но при использовании этих функций выходит один и тотже глюк!!!

есть функция:

function close_responce(limit)
     {
       if(limit > 0)
       {
            document.getElementById("timer_time").innerHTML=limit;
	 limit--;
             setTimeout(close_responce, 1000);
        }else{
             responce_close();
        }
}
    setTimeout(close_responce, 1000);

либо:
function close_responce(limit)
     {
       if(limit > 0)
       {
            document.getElementById("timer_time").innerHTML=limit;
	 limit--;
        }else{
             responce_close();
        }
}
    setInterval(close_responce, 1000);


впринципе разница в них небольшая и происходит одно и тоже!

есть контейнер <div id="timer_time"></div> и есть кнопка типа <button type="button" onClick="close_responce(10)">Click</button> и приклике идет отсчет от 10, до 0.... - все ок отсчет идет!, но если кликнуть несколько раз отсчет будет идти быстрее с кажым разом! а мне необходимо чтобы отсчитывалось по единицы раз в секунду..... вообще обычный таймер...

а как нужно в данный момент функция работает только в первый раз!!! при повторном запуске скорость отсчета ускоряется!, подскажите что мне исправить, чтобы небыло этой досадной проблемы!

MadGest 24.10.2010 10:51

Предлагаю поменять так :
var interval;

function close_responce(limit)
     {
       if(limit > 0)
       {
            document.getElementById("timer_time").innerHTML=limit;
	 limit--;
        }else{
             responce_close();
        }
}
    interval = setInterval(close_responce, 1000);


И теперь в том месте где происходит повторный вызов предварительно сделать clearInterval(interval);

shureg 24.10.2010 11:09

Цитата:

Сообщение от MadGest (Сообщение 75639)
Предлагаю поменять так :
И теперь в том месте где происходит повторный вызов предварительно сделать clearInterval(interval);

не помогло, вот для примера выложил как работает:((((
даже отсчитывать нормально перестал(

http://shureg.idhost.kz/test/index.php

MadGest 24.10.2010 11:26

<script language="JavaScript">
            var limit = 100;
            var interval;
            
            function close_responce()
            {
                if(limit > 0){
                    limit--;
                    document.getElementById("timer_time").innerHTML=limit;
                }
                else
                {
                    clearInterval(interval);
                    limit = 100;
                }
		clearInterval(interval);  //<----------
                interval = setInterval(close_responce, 1000);
            }
        </script>

shureg 24.10.2010 11:29

Спасибо! точто нужно! :dance: :dance:

вот еще небольшой глюк но уже несмертельно - если много много раз нажимать на старт с кажым кликом идет отсчет минус 1, даже если секунда не прошла... - впринципе не смертельно, но можно ли и это излечить?

MadGest 24.10.2010 11:35

var limit = 100;
        var interval;
            
			function Start()
			{
				if(interval === undefined)
					interval = setInterval(close_responce, 1000);
			}
            function close_responce()
            {
                if(limit > 0){
                    limit--;
                    document.getElementById("timer_time").innerHTML=limit;
                }
                else
                {
                    limit = 100;
                }                
            }


Ну и соответственно вызов такой:
<button type="button" onClick="Start();">Старт</button>

shureg 24.10.2010 11:43

спасибо, вопрсов не имею


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