mgo
OS/400 Edition
Volume 2, Number 90 -- December 4, 2002

Protecting HTML Page Elements with JavaScript and CSS


Hey, David:

I have an HTML form with several optional elements. Is there a way to protect and unprotect text elements based on a checkbox? When the user checks an alternate shipping address box, I want to open up a set of shipping address fields. I tried to do this with JavaScript, but the value of the checkbox doesn't seem to change in Internet Explorer.


-- Loren


You were on the right track checking the value for the checkbox; however checkboxes are a special case.

The value attribute for checkboxes represents what the browser sends to the server when the checkbox is checked but doesn't indicate whether it is checked. There is a special checked property that indicates the checked state.

I have provided a snippet of HTML code to get you started. In this example, I have also grayed out the shipping description fields to make it more obvious to the user that the fields are protected:

<html>
<head>
  <title&gt; Demonstrate Optional Form Elements</title>
  <style>
    .protected {
    color: gray;
    font-style: italic;}
    .unprotected {
    color: black;
    font-style: normal;}
  </style>
  <script language="JavaScript" type="text/javascript">
    function shipToChange() {
      if (document.getElementById("shipTo").checked == true) {
        document.getElementById("textShipTo").className="unprotected";
        document.getElementById("shipToName").disabled=false;
        document.getElementById("shipToName").focus();
        document.getElementById("shipToLine1").disabled=false;
        document.getElementById("shipToLine2").disabled=false;
        document.getElementById("shipToCity").disabled=false;
        document.getElementById("shipToState").disabled=false;
        document.getElementById("shipToZip").disabled=false;
      }
      else {
        document.getElementById("textShipTo").className="protected";
        document.getElementById("shipToName").disabled=true;
        document.getElementById("shipToLine1").disabled=true;
        document.getElementById("shipToLine2").disabled=true;
        document.getElementById("shipToCity").disabled=true;
        document.getElementById("shipToState").disabled=true;
        document.getElementById("shipToZip").disabled=true;
      }
    }
  </script>
</head>
<body>
  <form name="myForm" method="POST">
    <table>
      <tfoot>
        <tr>
          <td colspan="2">
            <input type="submit" name="submit" value="Update">
            <input type="submit" name="cancel" value="Cancel">
          </td>
        </tr>
      </tfoot>
      <tbody>
        <tr valign="top">
          <td>Billing Address:</td>
          <td>
            <input type="text" name="billToName" size="30"><br />
            <input type="text" name="billToLine1" size="30"><br />
            <input type="text" name="billToLine2" size="30"><br />
            <input type="text" name="billToCity" size="20">
            <input type="text" name="billToState" size="2">
            <input type="text" name="billToZip" size="10">
          </td>
        </tr>
        <tr align="top" valign="top">
          <td>Specify Shipping Address:</td>
          <td><input type="checkbox" name="shipTo" onchange="shipToChange();"></td>
        </tr>
    <tr valign="top">
          <td id="textShipTo">Ship To:</td>
          <td align="top">
            <input type="text" name="shipToName" size="30"><br />
            <input type="text" name="shipToLine1" size="30"><br />
            <input type="text" name="shipToLine2" size="30"><br />
            <input type="text" name="shipToCity" size="20">
            <input type="text" name="shipToState" size="2">
            <input type="text" name="shipToZip" size="10">
          </td>
        </tr>
      </tbody>
    </table>
  </form>
  <script language="JavaScript">
    shipToChange();
  </script>
</html>

To try this out on your computer, cut and paste the HTML source code listed above into an empty document and save it with a .html extension. When you are done, open it with your browser and try checking and unchecking the ship-to address. After toggling the checkbox, try typing an address in the ship-to address fields.

The elements on this page that are referred to in the javascript all have a property name or ID set by the name attribute for <input> elements, and by the ID attribute of the <td> element. This choice let me use the document.getElementById() function to manipulate those elements attributes. When a change is detected in the shipTo element, the shipToChange() script is run to set the style attributes of the ship-to address elements.

-- David


Sponsored By
ADVANCED SYSTEMS CONCEPTS

Business Analytics
- Practical -
- Cost Effective -
- Easy to Deploy -

SEQUEL FYI

User Quote:
"I love SEQUEL FYI because it lets me look at the data any way I need to see it, instantly. This is the easiest tool to manage complex product relationships that I have ever seen."

SEQUEL FYI offers outstanding OLAP business intelligence functionality for a fraction of the cost of comparable solutions.

Read More > View Streaming Video


THIS ISSUE
SPONSORED BY:

ASC
Centerfield Technology


BACK ISSUES

TABLE OF
CONTENTS

Protecting HTML Page Elements with JavaScript and CSS

LIKE is Like, Confusing, Man!

Reader Feedback and Insights: RPG II



Editors
Howard Arner
Joe Hertvik
Ted Holt
David Morris

Managing Editor
Mari Barrett

Publisher and
Advertising Director

Jenny Thomas

Advertising Sales Representative
Kim Reed

Contact the Editors
Do you have a gripe, inside dope or an opinion?
Email the editors:
editors@itjungle.com



Last Updated: 12/04/02
Copyright © 1996-2008 Guild Companies, Inc. All Rights Reserved.