Populate form values based on previous same form fields

R

Rizyak

This message is cross posted in
alt.comp.lang.php & comp.lang.javascript

I have a form for a user to input an establishment's hours and what time an
event is taking place. After the user inputs their establishment's hours of
operation I want the form elements lower in the form to adjust so that an
event can only happen when the place is open.

I have two fields for the hours:
These are both select fields with values between 0-23
store_open
store_close

Later in the form I have
event_start
event_stop

These values need to be between whatever store_open and store_close are.

I am stuck.

Thank you.
 
M

Mick White

Rizyak wrote
I have two fields for the hours:
These are both select fields with values between 0-23
store_open
store_close

Later in the form I have
event_start
event_stop

These values need to be between whatever store_open and store_close are.

I am stuck.

Thank you.

One approach

Number.protoype.isBetween=function(a,b){
return this>=Math.min(a,b) && this<=Math.max(a,b);
}

if(!( +event_start < +event_end &&
+event_start.isBetween(+store_open,+store_close) &&
+event_stop.isBetween(+store_open,+store_close))){
alert ("NO")
}
Mick
 
R

Robert

Rizyak said:
I have a form for a user to input an establishment's hours and what time an
event is taking place. After the user inputs their establishment's hours of
operation I want the form elements lower in the form to adjust so that an
event can only happen when the place is open.

Here is one approach to validating the event times:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Verify time fields</title>

<script type="text/javascript">

// ------------------------------------------
function validateAll()
{
alert("in validateAll");

var x = document.forms["myForm"];
var inputOK;

if( x.storeOpen.value == "" )
{
alert("Enter a store open time.");
inputOK= false;
}
else if( x.storeClose.value == "" )
{
alert("Enter a store close time.");
inputOK= false;
}
else if( x.eventStart.value == "" )
{
alert("Enter an event start time.");
inputOK= false;
}
else if( x.eventEnd.value == "" )
{
alert("Enter an event stop time.");
inputOK= false;
}
else
{
inputOK = checkBoth();
}

alert("from validateAll. inputOK = " + inputOK);
return inputOK;

}

// ..............................
function checkBoth()
{
alert("In checkBoth...");

var x = document.forms["myForm"];

var inputOK;

// Convert the times in string format to numeric format
// in minutes.
var storeOpen = convertTime(x.storeOpen.value);
var storeClose = convertTime(x.storeClose.value);
var eventStart = convertTime(x.eventStart.value);
var eventEnd = convertTime(x.eventEnd.value);

alert(".storeOpen.value = " + x.storeOpen.value +
" storeOpen = " + storeOpen +
"\n .storeClose.value = " + x.storeClose.value +
" storeClose = " + storeClose +
"\n .eventStart.value = " + x.eventStart.value +
" eventStart = " + eventStart +
"\n .eventEnd.value = " + x.eventEnd.value +
" eventEnd = " + eventEnd );

if ( eventStart > eventEnd )
{
alert("Event start must be before " +
"or equal to event end.");
x.eventStart.focus();
inputOK = false;
}
else if ( !isBetween(eventStart,storeOpen,storeClose) )
{
alert("Event start must occur " +
"when the store is open.");
x.eventStart.focus();
inputOK = false;
}
else if ( !isBetween(eventEnd,storeOpen,storeClose) )
{
alert("Event end must occur " +
"when the store is open.");
x.eventEnd.focus();
inputOK = false;
}
else
{
inputOK = true;
}


return inputOK;
}

// .....................................
function convertTime(timeString)
{

//Convert to a minute based value.
//Input may either be in 24 hour format
// or am/pm format.
// Examples 8:00am, 8, 8:12, 14:30, 2:30pm, or 4:30P.M.

var theTime = parseInt(timeString,10) * 60;

if ( timeString.indexOf("p") >= 0 ||
timeString.indexOf("P") >= 0 )
{
theTime += 12*60;
}

var minutesIndex = timeString.indexOf(":");
if ( minutesIndex >= 0 )
{
var minutes = timeString.substr(minutesIndex+1);
theTime += parseInt(minutes,10);
}

return theTime;
}

// ......................................
function isBetween(test,a,b)
{
return test>=a && test<=b;
}


</script>
</head>

<body>

<p>Please try out our form.</p>

<form name="myForm"
action="http://www.notavalidwebaddress.com"
method="POST"
onSubmit="return validateAll();">

<p>Store start time:<br>
<input type="text" name="storeOpen" size="20"><br><br>
Store end time:<br>
<input type="text" name="storeClose" size="20"><br>
</p>
<p>The little event times.</p>
<p>Event start time:<br>
<input type="text" name="eventStart" size="40">
<p>Event end time<br>
<input type="text" name="eventEnd" size="40">
</p>

<p><input type="submit" border="0" value="Submit">
</form>

</body>
</html>

Robert
 
L

Lee

Rizyak said:
This message is cross posted in
alt.comp.lang.php & comp.lang.javascript

I have a form for a user to input an establishment's hours and what time an
event is taking place. After the user inputs their establishment's hours of
operation I want the form elements lower in the form to adjust so that an
event can only happen when the place is open.

I have two fields for the hours:
These are both select fields with values between 0-23
store_open
store_close

Later in the form I have
event_start
event_stop

These values need to be between whatever store_open and store_close are.

The two answers I've seen have been describing how to validate the
input values to make sure they're in the correct range. Is that
what you're asking about, or are you trying to change the choices
that are available in Select menus?

You might want to be more flexible than that, anyway.
One of my favorite establishments lists their hours as
11:30am to 2am, but periodically hosts an event that
starts at 11am.
 
R

Rizyak

Indeed Lee is correct.
I am trying to change choices.
Envision selecting a state and a list of cities come up. I won't need to
make a database call like this, but it is similar ideas. Parent child
relationships.
I have come up with a solution that uses refresh and then I ran into
problems with my other form elements going away. Then I stored them as
cookies and had focus issues on refresh then I decided there has got to be
an easier way. If possible I would like to stick with dhtml....
I think the flexibility that lee was talking about won't be a problem once
the solution is found.
Thanks!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,898
Latest member
BlairH7607

Latest Threads

Top