Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com
Answertopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

Attribute for <INPUT ...>
onChange = "script command(s)"

onChange specifies script code to run when the data in the input field changes. onChange applies to input fields which accept text, namely text and password fields. (<TEXTAREA ...> and <SELECT ...> fields also use onChange.)

The onChange event is triggered when the contents of the field changes. For example, when the user enters an email address in this form, a script does some basic validity checking on the value entered:

<SCRIPT TYPE="text/javascript">
<!-- 
function checkEmail(email)
{
if(email.length > 0)
   {
   if (email.indexOf(' ') >= 0)
      alert("email addresses cannot have spaces in them");
   else if (email.indexOf('@') == -1)
      alert("a valid email address must have an @ in it");
   }
}
//-->
</SCRIPT>


<FORM ACTION="../cgi-bin/mycgi.pl" METHOD=POST>
name:        <INPUT NAME="realname"><BR>
email:       <INPUT NAME="email" onChange="checkEmail(this.value)"><BR>
destination: <INPUT NAME="desination">
</FORM>

which gives us this form:

name:
email:
destination:
Because onChange only occurs when the value changes, the user is only warned once about a bad value. That's generally the most desirable way to do error checking. Even if the value is wrong, most users prefer to be warned just once.

The onChange happens whenever anything changes the value of the field, not just when the user enters a value. If a field's onChange changes the value of the field, it's easy to get an endless loop. In situations like this, be sure to check if the change needs to happen. For example, this product order form makes sure that the "total" field is always the correct total (even if the user changes it). The subtotal field "vn_stVis" uses onChange to check if it is different than the hidden subtotal field "vn_stHold". If there is a difference, vn_stVis is reset, which then causes another onChange event. However, that second time around the two fields are the same, and the script ends.

<SCRIPT TYPE="text/javascript">
<!-- 
function orderTotal(oform, prefix)
{
// set references to fields
var qty = oform[prefix + "_qty"];
var stHold = oform[prefix + "_stHold"];
var price = oform[prefix + "_price"];
var stVis = oform[prefix + "_stVis"];

// only bother if the field has contents
if (qty == "")return;

// if the with is not a number (NaN)
// or is zero or less
// everything goes blank
if(isNaN(qty.value) || (qty.value <= 0))
   {
   qty.value = "";
   stHold.value = "";
   }
   
// else the field is a valid number, so calculate the 
// total order cost and put that value in the 
// hidden subtotal field
else
   stHold.value = (Math.round(qty.value * price.value * 100))/100;

// call the routine which checks if the 
// visible subtotal is correct
visTotal(oform, prefix);
}

// checks if the visible subtotal is correct
// ie, if it equals the hidden subtotal field
function visTotal(oform, prefix)
{
var stHold = oform[prefix + "_stHold"];
var stVis = oform[prefix + "_stVis"];

if (stVis.value != stHold.value)
   stVis.value = stHold.value;
}
// -->
</SCRIPT>

<FORM ACTION="../cgi-bin/mycgi.pl">
<TABLE BORDER CELLPADDING=3>
<!-- table titles -->
<TR BGCOLOR="#99CCFF">
   <TH>item</TD>
   <TH>quantity</TD>
   <TH>price</TD>
   <TH>total</TD>
   </TR>

<!-- v-neck sweater -->
<TR BGCOLOR="#FFFFCC">
   <TD>v-neck sweater</TD>
   <TD><INPUT 
         TYPE=TEXT 
         NAME="vn_qty" 
         SIZE=3 
         onChange="orderTotal(this.form, 'vn')" 
         ></TD>
   <TD><INPUT TYPE=HIDDEN NAME="vn_price" VALUE="33.95">$33.95</TD>
   <TD ALIGN=RIGHT>
      <INPUT TYPE=HIDDEN NAME="vn_stHold">
      <INPUT 
         TYPE=TEXT 
         NAME="vn_stVis" 
         SIZE=10 
         onChange="visTotal(this.form, 'vn')" 
         ></TD>
   </TR>

<!-- JoAnn style blazer -->
<TR BGCOLOR="#FFFFCC">
   <TD>JoAnn style blazer</TD>
   <TD><INPUT 
         TYPE=TEXT 
         NAME="ja_qty" 
         SIZE=3 
         onChange="orderTotal(this.form, 'ja')" 
         ></TD>
   <TD><INPUT TYPE=HIDDEN NAME="ja_price" VALUE="99.95">$99.95</TD>
   <TD ALIGN=RIGHT>
      <INPUT TYPE=HIDDEN NAME="ja_stHold">
      <INPUT 
         TYPE=TEXT 
         NAME="ja_stVis" 
         SIZE=10 
         onChange="visTotal(this.form, 'ja')" 
         ></TD>
   </TR>

</TABLE>

<P><INPUT TYPE=SUBMIT VALUE="submit">
</FORM>

which gives us this form:

item quantity price total
v-neck sweater $33.95
JoAnn style blazer $99.95

 
 
  Copyright 1997-2002 Idocs inc. Published under the terms of the Open Content License Design by Interspire