Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   setInterval и функции (https://javascript.ru/forum/misc/15246-setinterval-i-funkcii.html)

gradus 18.02.2011 22:28

setInterval и функции
 
var chID,tID; 
var t=1;
	function editint(isw){
		if(isw) {
		chID=setInterval("chat()",5000);
		}
		else{
		clearInterval(chID);
			tID=setInterval("edtime()",1000);
			}
		}

		function edtime()
		{ 
		t++;
		if(t==5) { editint(true); t=1; clearInterval(tID); }
		}

function setfrd(id)	{
editint(false);
}

$(document).ready(function(){ 
editint(true);
	});

если заюзать функцию setfrd несколько раз за 5 сек, то editint начинает странно работать уже без перерыва в 5 сек и срабатывает очень очень часто

dmitriymar 18.02.2011 22:47

ну и не удивительно.setInterval задаёт повторение функции бесконечное число раз(пока не будет остановлено её выполнение clearInterval) через опр промежуток времени. а ты при истинном условии всё добавляешь и добавляешь их количество-не количество повторений,а количество функций(хотя правильнее будет сказать частоту постановки функции в очередь) каждая из которых будет выполняться бесконечное колво раз через каждые ... миллисекунд

gradus 18.02.2011 23:02

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

dmitriymar 18.02.2011 23:08

Цитата:

Сообщение от gradus
if(isw) {
chID=setInterval("chat()",5000);
}

здесь перед тем как запустить ещё раз её "экземпляр" . отмени сначала предыдущий clearInterval(chID);

chat()-да и просмотри её. код ты её не выложил.чтобы в ней не было ещё создания новых "экземпляров"

dmitriymar 18.02.2011 23:27

и лучше здесь использовать http://javascript.ru/setTimeout вместо setInterval

gradus 03.03.2011 19:32

забыл ответить в общем написал вот так
function editint(isw){
		clearInterval(chID);
		clearTimeout(tID);
		if(isw) {
		chat();
		chID=setInterval("chat()",5000);
		}
		else{
			tID=setTimeout(function() { editint(true);  },5000);
			}
		}


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