update text field based on selection field

P

pkinville

ok, this is gonna seem stupid, but it has been stumping me all
afternoon.

I have two fields on a HTML page. HTML looks like this...

<html>
<head>
<title>New Page 3</title>
</head>
<body>
<form method="POST" action="index.asp">
<select size="1" name="shiptype" onchange="crazyJavascriptFuntion()">
<option selected>SELECT ONE</option>
<option value="3">GROUND (3 DAY)</option>
<option value="2">2ND DAY AIR (2 DAY)</option>
<option value="1">OVERNIGHT (1 DAY)</option>
</select>
<input type="text" name="duedate" size="20"></p>
</form>
</body>
</html>

I would like for the text field to automatically update to todays date
+ appropriate selection from ship type.

so if someone selects "GROUND" the text box called "duedate" will
update to Today + 1 day.

any help on this would be greatly appreciated.
 
D

Dietmar Meier

I would like for the text field to automatically update to todays date
+ appropriate selection from ship type.

A simple approach is ...

<script type="text/javascript">
function setDueDate(oSel) {
var nNow = new Date().getTime(),
nOff = oSel.options[oSel.selectedIndex].value * 8.64E7,
// 86400000 milliseconds are one day
dDue = new Date(nNow + nOff);
oSel.form.elements["duedate"].value
= dDue.getFullYear() + "/"
+ digits(dDue.getMonth() + 1, 2) + "/"
+ digits(dDue.getDate(), 2);
}
function digits(s, n) {
s = s.toString();
while (s.length < n) s = "0" + s;
return s;
}
</script>
[...]
<select name="shiptype" onchange="setDueDate(this)">

.... but this depends on correct date settings at client's system.
If your web server supports apache style Server Side Includes (SSI),
you can simply avoid that using a litte SSI extension:

<!--#config timefmt="%a, %d %b %Y %T GMT"-->
<script type="text/javascript">
var timeOffset = new Date().getTime()
- new Date("<!--#echo var="DATE_GMT" -->").getTime();
function getServerTime() {
return new Date(new Date().getTime() - timeOffset);
}
function setDueDate(oSel) {
var nNow = getServerTime(),
nOff = oSel.options[oSel.selectedIndex].value * 8.64E7,
dDue = new Date(nNow + nOff);
oSel.form.elements["duedate"].value
= dDue.getFullYear() + "/"
+ digits(dDue.getMonth() + 1, 2) + "/"
+ digits(dDue.getDate(), 2);
}
function digits(s, n) {
s = s.toString();
while (s.length < n) s = "0" + s;
return s;
}
</script>
[...]
<select name="shiptype" onchange="setDueDate(this)">

ciao, dhgm
 
F

Fred Oz

Dietmar Meier wrote:
[...]
function digits(s, n) {
s = s.toString();
while (s.length < n) s = "0" + s;
return s;
}

This can be a tad simpler:

// Add leading zero to numbers less than 10
function digits(x) {
return (x<10)? x = "0" + x : x;
}
 
D

Dietmar Meier

This can be a tad simpler:

Yes (but digits(s, n) is more versatile).
// Add leading zero to numbers less than 10
function digits(x) {
return (x<10)? x = "0" + x : x;
^^^^
Drop that "x = ".

Another simple and fast one:

function digits2(s) {
return (Number(s) + 100).toString().substring(1);
}

ciao, dhgm
 
G

Guest

thanks a TON you guys. i ended up with the following, which i had
bastardized from some other javascript i found. its only works with
..ASP pages, but it works...

<script language='javascript'>
function SelVal(fF,tF,fname,tname)
{
eval(tF + "." + tname + ".value = " + fF + "." + fname +
".options.value");
}
</script>

<form name="mess1" ID="Form1">
<table cellpadding="4" border="0" ID="Table2">
<tr>
<td>
<p><b>First</b></p>
</td>
<td>
<p><b><select style="width=140" name="us1"
onchange="SelVal('mess1','mess2','us1','sf1')" ID="Select1">
<option value selected>SELECT ONE
<option value="<%=NOW()+4%>">Ground (4 day)
<option value="<%=NOW()+2%>">2ND DAY (2 day)
<option value="<%=NOW()+1%>">OVERNIGHT (1 day)
</select></b></p>
</td>
</tr>
</table>
</form>
<form name="mess2" ID="Form2">
<table cellpadding="4" border="0" ID="Table3">
<tr>
<td>
<p><b>Second</b></p>
</td>
<td>
<p><input type="text" name="sf1" size="40" ID="Text2"></p>
</td>
</tr>
</table>
</form>

its ugly, its messy, but it does exactly what i wanted it to. thanks a
TON for your insight guys. probably gonna end up going with one of the
above solutions, just cause they look better and aren't .asp dependent.
 
D

Dietmar Meier

<script language='javascript'>
function SelVal(fF,tF,fname,tname)
{
eval(tF + "." + tname + ".value = " + fF + "." + fname +
".options.value");
}

This works in MSIE only, and is an extremely useless use of evil eval.
You should replace it with:

<script type="text/javascript" language='javascript'>
function SelVal(sel, tF, tname) {
var f, t;
if ((f = document.forms[tF]) && (t = f.elements[tname]))
t.value = sel.options[sel.selectedIndex].value;
}
</script>
....
<select [...] onchange="SelVal(this, 'mess2', 'sf1')" [...]>

ciao, dhgm
 
D

Dr John Stockton

JRS: In article <[email protected]>, dated Tue, 25 Jan
2005 23:34:01, seen in Dietmar Meier
var nNow = new Date().getTime(),
nOff = oSel.options[oSel.selectedIndex].value * 8.64E7,
// 86400000 milliseconds are one day Usually.
dDue = new Date(nNow + nOff);

Will probably fail if the interval spans the last Sunday in either March
or October, probably March.

nNow = new Date()
nOff = oSel.options[oSel.selectedIndex].value
dDue = nNow.setDate(nNow.getDate() + nOff)

See below.
 
D

Dr John Stockton

JRS: In article <41f6f494$0$10525$5a62ac22@per-qv1-newsreader-
01.iinet.net.au>, dated Wed, 26 Jan 2005 11:33:42, seen in
news:comp.lang.javascript said:
// Add leading zero to numbers less than 10
function digits(x) {
return (x<10)? x = "0" + x : x;
}

Unfortunately its result can be either a string or a number. That can
have unfortunate consequences if

YYYYMMDD = digits(D.getFullYear()) +
digits(D.getMonth()+1) +
digits(D.getDate())

is tested only in Jan..Sep. And the "x = " is not needed. Consider

return ( x<10 ? "0" : "") + x

See below.
 
D

Dietmar Meier


Always (apart from leap seconds). DST simply changes the time zone,
the length of a day (as Date.getTime() shows) is not really affected
by this.
Will probably fail if the interval spans the last Sunday in either
March or October, probably March.

Yep

ciao, dhgm
 
D

Dr John Stockton

JRS: In article <[email protected]>, dated Wed, 26 Jan
2005 09:35:34, seen in Dietmar Meier
function digits2(s) {
return (Number(s) + 100).toString().substring(1);
}


I tested something similar to that, and found it slower (on a reasonable
input mix) than conditionally adding "0" / ""; however, it seemed to be
the best algorithm for VBScript.

It's hardly critical; but it might be amusing to see what is really
best.


NOTE : There are two cases.

(1) the parameter is guaranteed to be an integer in the range 0..99 -
which is so for much common use.
(2) it is not - in that case my preference is for a method that will
always return the correct numerical value. If it's going to be wrong,
it should *look* wrong!

Consider these, which I have not timed :

function D2(X) { var S = X+""
return S.length==1 ? "0"+S : S }

function D2(X) { var S
return (S=X+"").length==1 ? "0"+S : S }

and note that they work equally well if the number is a hex string -
i.e. a -> 0a !
 
D

Dr John Stockton

JRS: In article <[email protected]>, dated Thu, 27 Jan
2005 01:00:23, seen in Dietmar Meier
Always (apart from leap seconds). DST simply changes the time zone,
the length of a day (as Date.getTime() shows) is not really affected
by this.

Date.getTime() has nothing to do with Days; it is an absolute time
measure, giving the same result simultaneously world-wide, for well-
adjusted systems. It is a pity that the identifier getUTCms was not
used instead.

The last Sunday in March has 23 hours, from 00:00 to 24:00.
The last Sunday in October has 25 hours, from 00:00 to 24:00.
North Americans are later in Spring, Antipodeans are inverted, others
vary.

ISO 8601:2000 considers the day as a unit of time to be 24 hours; but
the calendar day to be 24 hours +- leap second +- other (Summer Time)
changes.
 
D

Dietmar Meier

Dr said:
ISO 8601:2000 considers the day as a unit of time to be 24 hours; but
the calendar day to be 24 hours +- leap second +- other (Summer Time)
changes.

Agreed.

ciao, dhgm
 
D

Dietmar Meier

Dr said:
It's hardly critical; but it might be amusing to see what is really
best.

That's the kind of amusement my wife doesn't understand ...

For your gallery another funny one (even faster, especially in Geckos):

function d2tf5(n) {
return (- -n < 10 && "0" || "") + n;
}

ciao, dhgm
 
D

Dr John Stockton

JRS: In article <[email protected]>, dated Fri, 28 Jan
2005 01:32:49, seen in Dietmar Meier
That's the kind of amusement my wife doesn't understand ...

For your gallery another funny one (even faster, especially in Geckos):

function d2tf5(n) {
return (- -n < 10 && "0" || "") + n;
}

For me, as is, it is just a little faster than the LZ I've been using.

But it gives unfortunate results for x<0, and fixing that removes the
speed difference for me.

Starting -n > -10 saves one character!
 

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

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top