spacer
Yehuda Shiran October 30, 1999
Disabling Form Elements
Tips: October 1999

Yehuda Shiran, Ph.D.
Doc JavaScript

Developer News
ActiveState Debuts Open Source Business Suite
Salesforce Offers Visual App Builder
Codesion Steps Out From CVS's Shadow

HTML 4 adds the DISABLED attribute to form elements. For example:

<INPUT TYPE="button" NAME="myButton" VALUE="Submit" DISABLED>

This attribute can be attached to any <INPUT> tag. It disables the specified form element (it cannot be clicked). Note that this attribute is currently only supported by Internet Explorer 4.0x and above. A disabled form element can be enabled via JavaScript:

document.formName.elementName.disabled = false;

The element's disabled property holds a Boolean value (true or false). The following statement toggles the state of a form element:

document.formName.elementName.disabled = !document.formName.elementName.disabled;

The following code creates a form with a single text box. When the value of this field appears to be an emaill address, the submit button is enabled:

<SCRIPT LANGUAGE="JavaScript">
<!--

var IE4 = (document.all) ? 1 : 0;
if (IE4)
  var timerID = setInterval("enableSubmit()", 200);

function enableSubmit() {
  if (!IE4) return;
  var form = document.newsletter;
  var currentState = form.sub.disabled;
  var newState = !isEmail(form.email.value);
  if (newState != currentState)
    form.sub.disabled = newState;
}

function isEmail(str) {
  // are regular expressions supported?
  var supported = 0;
  if (window.RegExp) {
    var tempStr = "a";
    var tempReg = new RegExp(tempStr);
    if (tempReg.test(tempStr)) supported = 1;
  }
  if (!supported) 
    return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
  return (!r1.test(str) && r2.test(str));
}

// -->
</SCRIPT>
<FORM NAME="newsletter">
<INPUT TYPE="text" NAME="email" SIZE="30" onKeyUp="enableSubmit()">
<INPUT TYPE="submit" NAME="sub" VALUE="Submit" DISABLED>
</FORM>

If you study this code carefully, you'll notice that we're always (every 200 milliseconds, or 0.2 seconds) checking the value of the text field to see if it matches the syntax of an email address. If it looks like an email address, we enable the button so that the form can be submitted. If it doesn't represent an email address, we disable the button (if it is currently enabled). We also evaluate the text whenever the user presses a keyboard button in the box. The 200 millisecond interval is required because the user might enter an email address without pressing a button (e.g., pasting a string in the box). Now take a look at a live example that lets you subscribe to Webreference's newsletter:

HTML (daily)
Text (weekly)
Don't forget to check out Microsoft's documentation for the DISABLED attribute and the disabled property.


People who read this tip also read these tips:

Look for similar tips by subject:


The Network for Technology Professionals

Search:

About Internet.com

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | E-mail Offers

webref The latest from WebReference.com Browse >
Use Web Caching to Make Your Web Site Faster · Creating an Online Shopping Cart Mechanism in PHP · Log JavaScript Errors Using an AJAX-driven Web Service
Sitemap · Experts · Tools · Services · Email a Colleague · Contact FREE Newsletters 
 The latest from internet.com
Configuring Granular Settings for a Database Level Audit · The Perils of a Web 2.0 Transition on Your Business Processes · Facebook Redesigns Site —Again — Nears 400M Mark