Go Back   CodingForums.com > :: Client side development > JavaScript programming

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 08-07-2010, 08:54 PM   PM User | #1
bmcgonag
New to the CF scene

 
Join Date: Aug 2010
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
bmcgonag is an unknown quantity at this point
Page Refreshes before Timer has done it's job...

I'm just trying to make a simple interface.

On the html form the user enters the time to start, time to end, and frequency of a reminder alert.

I pass this to my javascript and then am trying to setup a 1 second loop where it checks against the clock to see if it's time to begin the reminders.

I get to the function, but the setTimeout doesn't complete and my page just refreshes.

Here's my javascript code for this section....

Code:
//-----------Start Countdown---------------------------
function StartCountDown(startTime, endTime, freq){
	now=new Date();
	intToStart=startTime-now;
	intInSec=intToStart/1000;
	alert(intInSec + " sec");
	if (now > startTime){
		StartRepeat(endTime, Freq);
		}
	else{
		var TTS=setTimeout("StartCountDown(startTime, endTime, freq);", 1000);
		}
}

function StartRepeat(endTime, freq){alert("Made it to StartRepeat Function");
	if (freq != 0){
		var task=setInterval("TaskRemind(endTime, freq)", freq);
		}
	else{
		clearTimeout(task);
		}
}

function TaskRemind(endTime, freq){
	alert("Do Task Now!");
	
	now=new Date();
	
	if (now <= endTime){
		StartRepeat(endTime, freq);
		}
	else{
		freq=0;
		StartRepeat(endTime, freq);
		}
}
Any help is greatly appreciated.

Brian
bmcgonag is offline   Reply With Quote
Old 08-07-2010, 10:02 PM   PM User | #2
gizmo1650
Regular Coder

 
Join Date: Apr 2010
Posts: 163
Thanks: 3
Thanked 25 Times in 25 Posts
gizmo1650 is on a distinguished road
in your form tag add onsubmit="return(false)"
gizmo1650 is offline   Reply With Quote
Old 08-07-2010, 10:34 PM   PM User | #3
bmcgonag
New to the CF scene

 
Join Date: Aug 2010
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
bmcgonag is an unknown quantity at this point
set the return(false) in the <form> tag...and it doesn't refresh anymore, but now I get to about the same spot, and it waits a few seconds then pops up with an alert box that I didn't make which says:

True!

It has a yellow triangle with an exclamation point in it.

Any ideas are welcome.

Is there some limit on the time that a timer or interval can be set at?
bmcgonag is offline   Reply With Quote
Old 08-07-2010, 11:24 PM   PM User | #4
gizmo1650
Regular Coder

 
Join Date: Apr 2010
Posts: 163
Thanks: 3
Thanked 25 Times in 25 Posts
gizmo1650 is on a distinguished road
can you post the HTML too (and any other js on the page)
gizmo1650 is offline   Reply With Quote
Old 08-07-2010, 11:41 PM   PM User | #5
bmcgonag
New to the CF scene

 
Join Date: Aug 2010
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
bmcgonag is an unknown quantity at this point
I was trying to keep the code posted minimal as instructed by the 'Read These First' topics, but okay...

HTML Code
Code:
<!DOCTYPE html>
<html>

<head>
   <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"/>
   <meta name="apple-mobile-web-app-capable" content="yes" />
   <meta name="apple-mobile-web-app-status-bar-style" content="black" />

<title>RepeaTask</title>
<link rel="stylesheet" type="text/css" href="RepeaTask.css" />

<script type="text/javascript" src="RepeaTask.js"></script>

</head>

<body>
   <form onsubmit="return(false)">
	<h1>RepeaTask</h1>
	<div class="intro">
		<p>Enter the Start Time for your repeated task, then enter the end time.  You can enter a repeat frequency in hours, minutes, or seconds.  If you do not enter a repeat frequency, the default frequency of 15 minutes will be used.
		</p>
	</div>
	
	<div class="timeform">
	Enter Start Time:
	</div>
	
	<div>
	<input type="number" name="STimeH" size="2" minimum="01" maximum="12" step="1" placeholder="01" />:
	<input type="number" name="STimeM" size="2" minimum="00" maximum="59" step="1" placeholder="00" />
	AM or PM: <input type="text" name="StartAorP" size="2" placeholder="PM"/>
	</div>

	<div>
	Enter End Time:
	</div>
	<div>
	<input type="number" name="ETimeH" size="2" minimum="01" maximum="12" step="1" placedholder="01" />:
	<input type="number" name="ETimeM" size="2" minimum="00" maximum="59" step="1" placedholder="00" />
	AM or PM<input type="text" name="EndAorP" size="2" placeholder="PM" />
	</div>

	<div>
	Enter Repeat Frequency in hh:mm:ss :
	</div>
	<div>
	<input type="number" name="FreqH" size="2" placeholder="00" />:
	<input type="number" name="FreqM" size="2" placeholder="00" />:
	<input type="number" name="FreqS" size="2" placeholder="00" />
	</div>
	<div><br></div>

	<div>
	<button type="submit"  name="Set Repeat Alert" onclick="SetTimer(STimeH, STimeM, StartAorP, ETimeH, ETimeM, EndAorP, FreqH, FreqM, FreqS)">Set Repeat Alert</button>
	<input type="button" value="Cancel Alert" onclick="CancelTimer()" />
	</div>

</form>
</body>
</html>
And here's the javascript code. Keep in mind, I"m a beginner, so there are probably much easier ways to do what I'm doing, and feel free to point them out.

JS Code
Code:
//RepeaTask.js   This is an initial startup

//Pull in User Entered Data

var q;
var timer_is_on=0;
var stimeh;
var stimem;
var etimeh;
var etimem;
var freqh;
var freqm;
var freqs;
var startaorp;
var endaorp;
var startTime;
var endTime;
var intToStart;
var freq;

//--------------------------------------------------------------------------//
function SetTimer(STimeH, STimeM, StartAorP, ETimeH, ETimeM, EndAorP, FreqH, FreqM, FreqS){
	stimeh=STimeH.value;
	stimem=STimeM.value;
	etimeh=ETimeH.value;
	etimem=ETimeM.value;
	freqh=FreqH.value;
	freqm=FreqM.value;
	freqs=FreqS.value;
	startaorp=StartAorP.value;
	endaorp=EndAorP.value;
	startTime=new Date();
	endTime=new Date();
	
	stimeh=stimeh*1;
	etimeh=etimeh*1;
	stimem=stimem*1;
	etimem=etimem*1;
	freqh=freqh*1;
	freqm=freqm*1;
	freqs=freqs*1;
	freq=(freqh*3600000)+(freqm*60000)+(freqs*1000);

//----------  Check AM or PM and convert to Military time if needed --------//
if (startaorp == "pm"){
	stimeh+=12;
	}

if (endaorp =="pm"){
	etimeh+=12;
	}

//-----------Set User Input in Time Format --------------------------------//
startTime.setHours(stimeh);
startTime.setMinutes(stimem);
startTime.setSeconds(0);
startTime.setMilliseconds(0);
endTime.setHours(etimeh);
endTime.setMinutes(etimem);
endTime.setSeconds(0);
endTime.setMilliseconds(0);

CalcTimeInt(startTime, endTime, freq);
}

//-----------Calculate the Time Interval-----------------------------------//
function CalcTimeInt(startTime, endTime, freq){

now = new Date();
intToStart=startTime-now;

var hours=(intToStart/3600000);
var hrem=(intToStart%3600000);
var h=parseInt(hours);

var min=(hrem/60000);
var m=parseInt(min);
var mrem=(intToStart%60000);

var sec=(mrem/1000);
var s=parseInt(sec);

alert("Now is " + now);
alert("Repeat Task Alerts will start in " + h + " Hrs " + m + " Min " + s + " Sec");
StartCountDown(startTime, endTime, freq);
}


//-----------Start Countdown--------------------------------------------------//
function StartCountDown(startTime, endTime, freq){
	now=new Date();
	intToStart=startTime-now;
	intInSec=intToStart/1000;
	if (now > startTime){
		StartRepeat(endTime, Freq);
		}
	else{
		var TTS=setTimeout("StartCountDown(startTime, endTime, freq);", 1000);
		}
}

function StartRepeat(endTime, freq){alert("Made it to StartRepeat Function");
	if (freq != 0){
		var task=setInterval("TaskRemind(endTime, freq)", freq);
		}
	else{
		clearTimeout(task);
		}
}

function TaskRemind(endTime, freq){
	alert("Do Task Now!");
	
	now=new Date();
	
	if (now <= endTime){
		StartRepeat(endTime, freq);
		}
	else{
		freq=0;
		StartRepeat(endTime, freq);
		}
}
Thanks, again for all the help,
bmcgonag is offline   Reply With Quote
Old 08-08-2010, 12:30 AM   PM User | #6
gizmo1650
Regular Coder

 
Join Date: Apr 2010
Posts: 163
Thanks: 3
Thanked 25 Times in 25 Posts
gizmo1650 is on a distinguished road
in line 95 you need to make freq lowercase
Code:
function StartCountDown(startTime, endTime, freq){
	now=new Date();
	intToStart=startTime-now;
	intInSec=intToStart/1000;
	if (now > startTime){
		StartRepeat(endTime, freq);//made f ing freq lowercase
		}
	else{
		var TTS=setTimeout("StartCountDown(startTime, endTime, freq);", 1000);
		}
}
i wasn't able to duplicate your problem with the true! alertbox.
in the future use your browsers developer tools when you write JavaScript. it will often tell you where the problem is
gizmo1650 is offline   Reply With Quote
Reply

Bookmarks

Tags
page, refresh, settimeout, timer

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 11:15 PM.


Advertisement
Log in to turn off these ads.