View Full Version : How to write OnClick with Validation and Hidden Layers

12-12-2006, 10:46 PM
I have a form that I have divided into several "pages" using the showlayer script as introduced on DevX. It also has a validation script:

<script type="text/javascript">


function MM_findObj(n, d) { //v4.01

var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {

d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}

if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];

for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);

if(!x && d.getElementById) x=d.getElementById(n); return x;


function MM_validateForm() { //v4.0

var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;

for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);

if (val) { nm=val.name; if ((val=val.value)!="") {

if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');

if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';

} else if (test!='R') { num = parseFloat(val);

if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';

if (test.indexOf('inRange') != -1) { p=test.indexOf(':');

min=test.substring(8,p); max=test.substring(p+1);

if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';

} } } else if (test.charAt(0) == 'R') errors += '- Respondent '+nm+' is required.\n'; }

} if (errors) alert('Sorry! Please fill in required fields and click submit again:\n'+errors);

return document.MM_returnValue = (errors == '');


function MM_popupMsg(msg) { //v1.0




var currentLayer = 'page1';

function showLayer(lyr) {



.style.visibility = 'visible';

currentLayer = lyr;


function hideLayer(lyr) {


style.visibility = 'hidden';



Within the HTML, I then have onClick event controls with showLayer commands:


<div id="page1" class="page">


<input type="button" id="C1" value="Start" onClick="showLayer('page2')">


<div id="page2" class="page">


<INPUT type=button value="Continue" onclick="MM_validateForm('Firstname','','R','Lastname','','R','Address','','R','City','','R','Zipco de','','RisNum','Country','','R'); showLayer('page3')">


<div id="page3" class="page">

The current code produces the correct error message when required fields are left blank, but then clicks through to the next layer when “ok” is clicked on the error message (document.MM_returnValue) screen. I have tried several iterations of “else” but to no avail. How do I get the script to tell the computer “If errors, show error screen and go back to same page (highlight first error would be even better), else show next layer”?