[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: setinterval
BeerMan88
Здравствуйте!
есть функция таймера!
Она работает нормально но если запустить еще еще раза таймер начинает прыгать показывать
два раза! а нужно чтобы старый удалился и запустился новый!
помогите пожалуйста!
var limit = data.message;
var interval;
if(interval === undefined){
clearInterval(interval);
interval = setInterval(function(){close_responce()
function close_responce(){
if(limit > 0){
limit--;
document.getElementById("timer").innerHTML=toFormattedTime(limit);
}
else
{
limit = 0;
}
}
}
, 1000);
}


inpost
BeerMan88
Таймера нельзя запускать 2 одновременно smile.gif
Либо 1 таймер-интервал, либо делай через timeout саму себя вызывай.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
BeerMan88
да он то работает но если запускать несколько раз так и время потом показывает несколько раз! а нодо чтобы только тот что нажал последний раз
sergeiss
Цитата (BeerMan88 @ 5.06.2014 - 19:19)
да он то работает...

Но не так, как ты ожидаешь smile.gif Ты же что делаешь? Пока счетчик не уменьшился до нуля, ты выводишь инфу. Затем ты просто перестаешь ее выводить, но сам таймер продолжает работать!!! Как только переменная становится больше нуля, уже существующий таймер продолжает ее выводить. До тех пор, пока она опять не станет нулевой.
Если ты создашь еще один таймер, то да, они будут работать в параллель. И три, и четыре таймера.
Ты должен запустить clearinterval(), но не так, как ты это делаешь, а правильно. Например, если ты каждый раз создаешь новый таймер, то тогда предыдущий удаляй сразу же, как только переменная limit стала нулевой.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
BeerMan88
а как их остановить? я видь поставл clearinterval() перед добавлением нового но не работает(((
таймер добавляеться по ответу ajax
sergeiss
Ты считаешь, что у тебя написан корректный код?

На самом деле, это некорректно абсолютно :)
if(interval === undefined){
clearInterval(interval);
...

}

У тебя не будет удаляться ничего.

Цитата (BeerMan88 @ 5.06.2014 - 19:51)
таймер добавляеться по ответу ajax

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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
BeerMan88
ну вот как сейчас написано
function pay_pol(num){
var typesemena = $("input[name=semena]:checked").val();
var udob = $("input[name=udob]:checked").val();
$.ajax({
type: "POST",
dataType : "json",
url: "ajax.php",
data: { 'func' : 'success', 'pole' : num, 'type' : typesemena, 'udob' : udob}
}
).done(function( data ) {
if(data.data == 0) {
$("#pole_" + num).removeClass("pole_kupit");
}else if(data.data == 1) {
$("#pole_" + num).addClass("posadil" + typesemena);
}else if(data.data == 2) {
$("#pole_" + num).addClass("udobreno" + data.type);
}else if(data.data == 3) {
$("#pole_" + num).removeClass("gotovo"+ typesemena);
$("#pole_" + num).removeClass("udobreno"+ typesemena);
$("#pole_" + num).removeClass("posadil" + typesemena);
}else if(data.timer == 1){
var id_pole = data.id;
var limit = data.message;
var interval = setInterval(function(){close_responce()

function close_responce(){
if(limit > 0){
$("#timer").html("До сбора осталось: " + toFormattedTime(limit--)).show();
}else{
clearInterval(interval);
$("#timer").html("Можно собирать урожай").show();
}
}
}
, 1000);
}else{
$("#errors_pole").html(data.message).show();/*$("#errors_pole").fadeOut(5000);*/
}
}
).fail(function( jqXHR, textStatus ) {
alert( "Вы слишком часто нажимаете на поля!");
});
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.