We have a web application with a form that expands for additional input when a "Chemical" is selected. I'm trying to validate on one of the "revealed" fields except that I can't if the user goes back and "hides" it by clicking on "General" button again. That's probably okay, except it keeps the name of the chemical in the description box.
Clicking on the "Chemical" button works to display the chemicals drop down list as well as the HMIS selections. Clicking on the "General" button works to collapse the form and re-hide the additional fields. What I need it to do is when I click on the "General" tab after first selecting a chemical is have it also blank out all of the "revealed" form fields as well as the "Description" field that it populates.
Does anyone have an idea on an easy way to do this? Thanks.
Paul.
Here's an example:
Clicking on the "Chemical" button works to display the chemicals drop down list as well as the HMIS selections. Clicking on the "General" button works to collapse the form and re-hide the additional fields. What I need it to do is when I click on the "General" tab after first selecting a chemical is have it also blank out all of the "revealed" form fields as well as the "Description" field that it populates.
Does anyone have an idea on an easy way to do this? Thanks.
Paul.
Here's an example:
Code:
<html><head>
<SCRIPT LANGUAGE="JavaScript">
<!--
/*****************************************/
/** Usable Forms 1.0, May 2003 **/
/** Written by ppk, [URL unfurl="true"]www.quirksmode.org[/URL] **/
/** Instructions for use on my site **/
/** **/
/** You may use or change this script **/
/** only when this copyright notice **/
/** is intact. **/
/** **/
/** If you extend the script, please **/
/** add a short description and your **/
/** name below. **/
/*****************************************/
var relatedTag = 'TR';
var compatible = (
document.getElementById && document.getElementsByTagName && document.createElement
&&
!(navigator.userAgent.indexOf('MSIE 5') != -1 && navigator.userAgent.indexOf('Mac') != -1)
);
if (compatible)
document.write('<style>.accessibility{display: none}</style>');
function prepareForm()
{
if (!compatible) return;
var marker = document.createElement(relatedTag);
marker.style.display = 'none';
var x = document.getElementsByTagName(relatedTag);
var toBeRemoved = new Array;
for (var i=0;i<x.length;i++)
{
if (x[i].getAttribute('relation'))
{
var y = getAllFormFields(x[i]);
x[i].nestedRels = new Array;
for (var j=0;j<y.length;j++)
{
var rel = y[j].getAttribute('show');
if (!rel || rel == 'none') continue;
x[i].nestedRels.push(rel);
}
if (!x[i].nestedRels.length) x[i].nestedRels = null;
toBeRemoved.push(x[i]);
}
}
while (toBeRemoved.length)
{
var rel = toBeRemoved[0].getAttribute('relation');
if (!document.getElementById(rel))
{
var newMarker = marker.cloneNode(true);
newMarker.id = rel;
toBeRemoved[0].parentNode.replaceChild(newMarker,toBeRemoved[0]);
}
document.getElementById('waitingRoom').appendChild(toBeRemoved.shift());
}
document.onclick = arrangeFormFields;
var y = document.getElementsByTagName('input');
for (var i=0;i<y.length;i++)
{
if (y[i].checked && y[i].getAttribute('show'))
intoMainForm(y[i].getAttribute('show'))
}
var z = document.getElementsByTagName('select');
// Opera weird with hidden selects in quirks mode: selectedIndex = -1
for (var i=0;i<z.length;i++)
{
if (z[i].options[z[i].selectedIndex].getAttribute('show'))
{
z[i].onchange = arrangeFormFields;
intoMainForm(z[i].options[z[i].selectedIndex].getAttribute('show'))
}
}
}
function arrangeFormFields(e)
{
if (!e) var e = window.event;
var tg = (e.target) ? e.target : e.srcElement;
if (
!(tg.nodeName == 'SELECT' && e.type == 'change')
&&
!(tg.nodeName == 'INPUT' && tg.getAttribute('show'))
) return;
var toBeInserted = tg.getAttribute('show');
/* Why no switch statement? Because Netscape 3 gives an error message on encountering it,
and this script must degrade perfectly. */
if (tg.type == 'checkbox')
{
if (tg.checked)
intoMainForm(toBeInserted);
else
intoWaitingRoom(toBeInserted);
}
else if (tg.type == 'radio')
{
removeOthers(tg.form[tg.name],toBeInserted)
intoMainForm(toBeInserted);
}
else if (tg.type == 'select-one')
{
toBeInserted = tg.options[tg.selectedIndex].getAttribute('show');
removeOthers(tg.options,toBeInserted);
intoMainForm(toBeInserted);
}
}
function removeOthers(others,toBeInserted)
{
var toBeRemoved = new Array;
for (var i=0;i<others.length;i++)
{
var show = others[i].getAttribute('show');
if (show != toBeInserted)
toBeRemoved.push(show);
}
while (toBeRemoved.length)
intoWaitingRoom(toBeRemoved.shift());
}
function gatherElements(name)
{
var Elements = new Array;
var x = document.getElementsByTagName(relatedTag);
for (var i=0;i<x.length;i++)
if (x[i].getAttribute('relation') == name)
Elements.push(x[i]);
return Elements;
}
function intoWaitingRoom(name)
{
if (name == 'none') return;
var Elements = gatherElements(name);
if (isInWaitingRoom(Elements[0])) return;
while (Elements.length)
{
if (Elements[0].nestedRels)
for (var i=0;i<Elements[0].nestedRels.length;i++)
intoWaitingRoom(Elements[0].nestedRels[i]);
document.getElementById('waitingRoom').appendChild(Elements.shift())
}
}
function intoMainForm(name)
{
if (name == 'none') return;
var Elements = gatherElements(name);
if (!isInWaitingRoom(Elements[0])) return;
var insertPoint = document.getElementById(name);
while (Elements.length)
insertPoint.parentNode.insertBefore(Elements.shift(),insertPoint)
}
function isInWaitingRoom(obj)
{
while(obj.nodeName != 'BODY')
{
obj=obj.parentNode;
if (obj.id == 'waitingRoom')
return true;
}
return false;
}
function getAllFormFields(node)
{
var allFormFields = new Array;
var x = node.getElementsByTagName('input');
for (var i=0;i<x.length;i++)
allFormFields.push(x[i]);
var y = node.getElementsByTagName('option');
for (var i=0;i<y.length;i++)
allFormFields.push(y[i]);
return allFormFields;
}
// push and shift for IE5
function Array_push() {
var A_p = 0
for (A_p = 0; A_p < arguments.length; A_p++) {
this[this.length] = arguments[A_p]
}
return this.length
}
if (typeof Array.prototype.push == "undefined") {
Array.prototype.push = Array_push
}
function Array_shift() {
var A_s = 0
var response = this[0]
for (A_s = 0; A_s < this.length-1; A_s++) {
this[A_s] = this[A_s + 1]
}
this.length--
return response
}
if (typeof Array.prototype.shift == "undefined") {
Array.prototype.shift = Array_shift
}
// End hiding -->
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
<!--
function requiredfields() {
var form = document.General_Requisition;
if (form.strHMISHealth.value == "") {
alert("You must input a Health Value!");
form.strHMISHealth.focus ();
return false;
}
return true;
}
// End hiding -->
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
<!--
function validDecnum(input) {
if (!checkDecNumber(input)) {
alert("A Numeric value is required here");
input.focus ();
return false;
}
return true;
}
function checkDecNumber(obj)
{
var str = obj.value;
for (var i = 0; i < str.length; i++) {
var ch = str.substring(i, i + 1)
if ((ch < "0" || "9" < ch) && ch != '.') return false;
}
return true;
}
function calclinetotal() {
var num = document.General_Requisition.elements.length;
for (var i=0; i<num; i++) {
if (document.General_Requisition.elements[i].name.substring(0,10) == "Unit_Cost_") {
Unit_Cost_ = document.General_Requisition.elements[i].value;
Quantity_ = document.General_Requisition.elements[i-4].value;
if ((Unit_Cost_ != null && Unit_Cost_ != "") && (Quantity_ != null && Quantity_ != "")) {
extcost = parseFloat(Unit_Cost_) * parseFloat(Quantity_);
document.General_Requisition.elements[i+1].value = extcost.toString();
}
}
}
return;
}
function calcsubtotal() {
var num = document.General_Requisition.elements.length;
var myTotal = 0.0;
for (var i=0; i<num; i++) {
if (document.General_Requisition.elements[i].name.substring(0,11) == "Total_Cost_") {
linecost = document.General_Requisition.elements[i].value
if (linecost == null || linecost == "") {
fieldvalue = 0.0;
} else {
fieldvalue = parseFloat(document.General_Requisition.elements[i].value);
}
myTotal = myTotal + fieldvalue;
}
}
document.General_Requisition.Total.value = myTotal.toString();
return;
}
// End hiding -->
</SCRIPT>
</head>
<body onload="prepareForm()">
<SCRIPT LANGUAGE="JavaScript">
var codeArray1 = new Array("","1","2","3")
var nameArray1 = new Array(""," ","Sulphuric Acid","Chloroform")
var ChemicalnameArray1 = new Array(""," ","Sulphuric Acid","Chloroform")
var HMISHealthArray1 = new Array(""," ","3","3")
var HMISFlammableArray1 = new Array(""," ","0","0")
var HMISReactiveArray1 = new Array(""," ","3","1")
var HMISpecificArray1 = new Array(""," ","0","0")
var HMISColorArray1 = new Array(""," ","White","Blue")
function displayInfo() {
var tempIndex
tempIndex=document.General_Requisition.strName.selectedIndex
tempIndex = tempIndex + 1;
document.General_Requisition.Description_1.value=ChemicalnameArray1[tempIndex]
document.General_Requisition.strHMISHealth.value=HMISHealthArray1[tempIndex]
document.General_Requisition.strHMISFlammable.value=HMISFlammableArray1[tempIndex]
document.General_Requisition.strHMISReactive.value=HMISReactiveArray1[tempIndex]
document.General_Requisition.strHMISpecific.value=HMISpecificArray1[tempIndex]
document.General_Requisition.strHMISColor.value=HMISColorArray1[tempIndex]
}
</SCRIPT>
<table><tbody id="waitingRoom" style="display: none"></tbody></table>
<FORM NAME="General_Requisition" ACTION="#" METHOD="POST" onSubmit="return requiredfields()">
<center><table>
<tr>
<td align="middle"><b>Type</b></td>
<td align="middle"><b>Quantity</b></td>
<td align="middle"><b>Unit</b></td>
<td align="middle"><b>Catalog #</b></td>
<td align="middle"><b>Description</b></td>
<td align="middle"><b>Unit Cost</b></td>
<td align="middle"><b>Total</b></td>
</tr>
<tr>
<td><input type="radio" Name="ReqType_1" Value="General" show="none" />General <input type="radio" Name="ReqType_1" Value="Chemical" show="chemical" />Chemical</td>
<td><input size="3" type="text" name="Quantity_1" onBlur="validDecnum(this); calclinetotal(); calcsubtotal();"></td>
<td>
<SELECT NAME="Unit_1">
<OPTION VALUE="each">each</option>
<OPTION VALUE="dozen">dozen</option>
</SELECT>
</td>
<td><input size="10" type="text" name="Catalog_1"></td>
<td><input size="60" type="text" name="Description_1"></td>
<td><input size="7" type="text" name="Unit_Cost_1" onChange="validDecnum(this);" onblur="calclinetotal(); calcsubtotal();"></td>
<td><input size="8" type="text" name="Total_Cost_1" onChange="validDecnum(this);" onblur="calclinetotal(); calcsubtotal();"></td>
</tr>
<tr relation="chemical">
<td colspan=6><b>Please select a chemical:</b> <SELECT NAME="strName" onChange="displayInfo()">
<option value="0">Please select a Chemical...</option>
<option value="1">Sulphuric Acid</option>
<option value="2">Chloroform</option>
</SELECT></td>
</tr>
<tr relation="chemical">
<td align="middle"> </td><td align="middle"> </td>
<td align="middle"><b>Health</b></td>
<td align="middle"><b>Flammable</b></td>
<td align="middle"><b>Reactive</b></td>
<td align="middle"><b>Specific</b></td>
<td align="middle"><b>Color Code</b></td>
</tr>
<tr relation="chemical">
<td align="middle"> </td><td align="middle"> </td>
<td><input size="3" type="text" name="strHMISHealth"></td>
<td><input size="3" type="text" name="strHMISFlammable"></td>
<td><input size="3" type="text" name="strHMISReactive"></td>
<td><input size="3" type="text" name="strHMISpecific"></td>
<td><input size="10" type="text" name="strHMISColor"></td>
</tr>
<tr><td colspan="5" align="right">TOTAL: </td><td align="right"><input size="10" type="text" name="Total"></td></tr>
</table></center>
<br><br><center><INPUT TYPE="submit" Name="SelectButton" VALUE="Submit Requisition"></center>
</form>
</body></html>