746
Views
11
Comments
Destroy a javascript action
Question

Hi,

I am trying to add a time count logic using javascript in a web block,

What I did is, in On ready action I implemented this code

var deadline = new Date($parameters.Datetime).getTime();
var x = setInterval(function() {
var now = new Date().getTime();
var t = deadline - now;
var days=Math.floor(t / (1000 * 60 * 60 * 24));
var hours=Math.floor((t%(1000 * 60 * 60 * 24))/(1000 * 60 * 60));
var minutes=Math.floor((t % (1000 * 60 * 60)) / (1000 * 60));
var seconds=Math.floor((t % (1000 * 60)) / 1000);
document.getElementById($parameters.Day).innerHTML =days ;
document.getElementById($parameters.Hour).innerHTML =hours;
document.getElementById($parameters.Minute).innerHTML = minutes;
document.getElementById($parameters.Seconds).innerHTML =seconds;
if (t < 0) {
        clearInterval(x);
        document.getElementById($parameters.Paragraph).innerHTML = "TIME UP";
        document.getElementById($parameters.Day).innerHTML ='0';
        document.getElementById($parameters.Hour).innerHTML ='0';
        document.getElementById($parameters.Minute).innerHTML ='0' ;
        document.getElementById($parameters.Seconds).innerHTML = '0'; }
}, 1000);



now I need to destroy the action in OnDestroy since I am not that much expert in javascript.

can anyone suggest me how to do that?


The problem I am facing is initially I will pass the date and time value to the block.

when I change the value and there were two counts running simultaneously.

I want to stop the timer count of the first passed value


Thanks

Keerthi.

2020-09-15 13-07-23
Kilian Hekhuis
 
MVP

HI Keerthi,

setInterval returns a value that you can use in clearInterval to stop the timer. Also, you need to clear in the OnDestroy of the Screen.

2026-02-19 02-54-36
Keerthi Vasan V

Kilian Hekhuis wrote:

HI Keerthi,

setInterval returns a value that you can use in clearInterval to stop the timer. Also, you need to clear in the OnDestroy of the Screen.

Still the same issue, The timer is running .. i dont know whether i made some mistakes or not


on ready script

var deadline = new Date($parameters.Datetime).getTime();
clearInterval($parameters.Con);
$parameters.Con=setInterval(function() {
var now = new Date().getTime();
var t = deadline - now;
var days=Math.floor(t / (1000 * 60 * 60 * 24));
var hours=Math.floor((t%(1000 * 60 * 60 * 24))/(1000 * 60 * 60));
var minutes=Math.floor((t % (1000 * 60 * 60)) / (1000 * 60));
var seconds=Math.floor((t % (1000 * 60)) / 1000);
document.getElementById($parameters.Day).innerHTML =days ;
document.getElementById($parameters.Hour).innerHTML =hours;
document.getElementById($parameters.Minute).innerHTML = minutes;
document.getElementById($parameters.Seconds).innerHTML =seconds;
if (t < 0) {
        clearInterval($parameters.Con);
        document.getElementById($parameters.Paragraph).innerHTML = "TIME UP";
        document.getElementById($parameters.Day).innerHTML ='0';
        document.getElementById($parameters.Hour).innerHTML ='0';
        document.getElementById($parameters.Minute).innerHTML ='0' ;
        document.getElementById($parameters.Seconds).innerHTML = '0'; }
}, 1000);

On Destroy script

clearInterval($parameters.Con);
document.getElementById($parameters.Day).innerHTML =0 ;
document.getElementById($parameters.Hour).innerHTML =0;
document.getElementById($parameters.Minute).innerHTML = 0;
document.getElementById($parameters.Seconds).innerHTML =0;



$parameters.Con is the local variable

2020-09-15 13-07-23
Kilian Hekhuis
 
MVP

That should do the trick, I've used it like that myself. Have you checked the browser's console to see whether any errors are displayed?

2026-02-19 02-54-36
Keerthi Vasan V

Kilian Hekhuis wrote:

That should do the trick, I've used it like that myself. Have you checked the browser's console to see whether any errors are displayed?

https://keerthi-vasan.outsystemscloud.com/PreviewInDevices/?IsMobilePreview=True&DeviceName=Smartphone&URL=/CountDown/CountDown?_ts=636675292429757106

Can you please check the link,

Go to the link, select the date and time, click start

The countdown will start loading,

now go to the menu and click home screen again

now enter another date and time and click start,

you can see the old countdown and new countdown running simultaneously.


that's the issue I am facing


Thanks,

Keerthi

2020-09-15 13-07-23
Kilian Hekhuis
 
MVP

Can you share the OML (eSpace) for that?

2026-02-19 02-54-36
Keerthi Vasan V

Please Check the attachment

CountDown.oml
2020-09-15 13-07-23
Kilian Hekhuis
 
MVP

Hi Keerthi,

I don't see an OnDestroy defined for the Home Screen. It should be defined here:

Inside the Screen Action, put a JavaScript Statement with the clearInterval().

2026-02-19 02-54-36
Keerthi Vasan V

I did as you said,

I got an error clear interval is not defined.


can you do that modification on that oml that I sent earlier? and can you share that?

2020-09-15 13-07-23
Kilian Hekhuis
 
MVP

Well, if it complains about the interval not being defined, you don't store and use the right result from the setInterval. I can't modify and test the eSpace, as I can't publish it in my Personal Environment.

2026-02-19 02-54-36
Keerthi Vasan V

Thanks, Kilian.

I will do some R&D on that and will try to resolve it myself

2020-09-15 13-07-23
Kilian Hekhuis
 
MVP

I hope you can make it work Keerthi!

Community GuidelinesBe kind and respectful, give credit to the original source of content, and search for duplicates before posting.