Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вызов функции, отмена старой функции. Таймер (https://javascript.ru/forum/events/74906-vyzov-funkcii-otmena-starojj-funkcii-tajjmer.html)

finlolo 15.08.2018 16:49

Вызов функции, отмена старой функции. Таймер
 
Здравствуйте.

Есть функция, которая постит время на разные элементы на странице, которое высчитывает от момента клика на кнопку у определенного элемента и нынешнего времени.
Как сделать так, чтобы при повторном вызове этой функции, когда ей передают новое значение последнего клика, убрать старую функцию. Иначе получается, что накладывается таймер на таймер и пытаются вывестись в одном месте два значения, с момент старого клика, и с момента нынешнего клика.

Спасибо.

Вот пример функции:

function Posting(postTimer, postId, postUptime, postSR){
    document.querySelector('#ratenow_'+postId).innerHTML = postSR;
    var Kur = setInterval(
        function(){
            var nowtime = new Date();
            var nt = nowtime.getTime();
            var diff =  nt-Date.parse(postUptime);
            var timestr = parseInt(diff/60000)+':'+addZeros(parseInt((diff/1000)%60));
            document.querySelector('#timer_'+postId).innerHTML = timestr;
        },1000
    );
}

рони 15.08.2018 17:25

finlolo,
var Kur;
    function Posting(postTimer, postId, postUptime, postSR){
    document.querySelector('#ratenow_'+postId).innerHTML = postSR;
    window.clearInterval(Kur);
    Kur = setInterval(
        function(){
            var nowtime = new Date();
            var nt = nowtime.getTime();
            var diff =  nt-Date.parse(postUptime);
            var timestr = parseInt(diff/60000)+':'+addZeros(parseInt((diff/1000)%60));
            document.querySelector('#timer_'+postId).innerHTML = timestr;
        },1000
    );
}

finlolo 15.08.2018 17:38

рони,
такой способ у меня почему-то не работает.

рони 15.08.2018 17:45

finlolo,
что консоль пишет?

finlolo 15.08.2018 17:52

рони,
ничего. у меня по нажатию приходят новые данные, вызывается эта функция, которая постит время и новые значения с
window.clearInterval(Kur);
но новые данные выводятся поверх старых и так далее..
в общем, как и было.

рони 15.08.2018 18:01

finlolo,
значит вы что-то не договариваите.

finlolo 15.08.2018 18:06

рони,
вероятно я до этого допустил ошибку. еще раз переписал как показали. сейчас у меня из 5 таймеров на странице работает только один. Консоль ошибок не выдает .

рони 15.08.2018 18:22

finlolo,
?

рони 15.08.2018 18:36

Цитата:

Сообщение от finlolo
сейчас у меня из 5 таймеров на странице работает только один. Консоль ошибок не выдает .

это проблема или так и должно быть?

рони 15.08.2018 18:40

finlolo,
...
var Kur = {};
    function Posting(postTimer, postId, postUptime, postSR){
    document.querySelector('#ratenow_'+postId).innerHTML = postSR;
    Kur[postId] && window.clearInterval(Kur[postId]);
    Kur[postId] = setInterval(
        function(){
            var nowtime = new Date();
            var nt = nowtime.getTime();
            var diff =  nt-Date.parse(postUptime);
            var timestr = parseInt(diff/60000)+':'+addZeros(parseInt((diff/1000)%60));
            document.querySelector('#timer_'+postId).innerHTML = timestr;
        },1000
    );
}


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