Good morning. I am a complete newbie so if I am putting this in the wrong place please let me know. I am not a web developer. I have been asked to work on a web form at work and I am struggling through it.
I did the form in html.....that was not hard. Now I am doing validation on some of the fields with a javascript example that I got from a former co-worker. I am just tweaking it to make it work with my form. I have all the fields validated successfully except for the checkboxes. My current co-worker is going to take the info and send it in an e-mail using .asp. He told me to name all the checkbox fields the same thing to make his part easier. The problem is my validation method does not like duplicate names so this is not working. There are probably other ways to validate but I would like to stay with this method if possible since it works for all the other fields and since I am very green at this stuff.
I have included all my pertinent code below. Any help is appreciated.
function YY_checkform() { //v4.71
//copyright (c)1998,2002 Yaromat.com
var a=YY_checkform.arguments,oo=true,v='',s='',err=false,r,o,at,o1,t,i,j,ma,rx,cd,cm,cy,dte,at;
for (i=1; i<a.length;i=i+4) {
if (a[i+1].charAt(0)=='#'){r=true; a[i+1]=a[i+1].substring(1);}else{r=false}
o=MM_findObj(a[i].replace(/\[\d+\]/ig,""));
o1=MM_findObj(a[i+1].replace(/\[\d+\]/ig,""));
v=o.value;t=a[i+2];
if (o.type=='text'||o.type=='password'||o.type=='hidden')
{
if (r&&v.length==0){err=true}
if (v.length>0)
if (t==1){ //fromto
ma=a[i+1].split('_');if(isNaN(v)||v<ma[0]/1||v > ma[1]/1){err=true}
}
else if (t==2){
rx=new RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[a-zA-Z]{2,4}$");if(!rx.test(v))err=true;
}
else if (t==3){ // date
ma=a[i+1].split("#");at=v.match(ma[0]);
if(at){
cd=(at[ma[1]])?at[ma[1]]:1;cm=at[ma[2]]-1;cy=at[ma[3]];
dte=new Date(cy,cm,cd);
if(dte.getFullYear()!=cy||dte.getDate()!=cd||dte.getMonth()!=cm){err=true};
}else{err=true}
}
else if (t==4){ // time
ma=a[i+1].split("#");at=v.match(ma[0]);if(!at){err=true}
}
else if (t==5){ // check this 2
if(o1.length)o1=o1[a[i+1].replace(/(.*\[)|(\].*)/ig,"")];
if(!o1.checked){err=true}
}
else if (t==6){ // the same
if(v!=MM_findObj(a[i+1]).value){err=true}
}
} else
if (!o.type&&o.length>0&&o[0].type=='radio'){
at = a[i].match(/(.*)\[(\d+)\].*/i);
o2=(o.length>1)?o[at[2]];
if (t==1&&o2&&o2.checked&&o1&&o1.value.length/1==0){err=true}
if (t==2){
oo=false;
for(j=0;j<o.length;j++){oo=oo||o[j].checked}
if(!oo){s+='* '+a[i+3]+'\n'}
}
}
else if (o.type=='checkbox'){
if((t==1&&o.checked==false)||(t==2&&o.checked&&o1&&o1.value.length/1==0)){err=true}
}
else if (o.type=='select-one'||o.type=='select-multiple'){
if(t==1&&o.selectedIndex/1==0){err=true}
}
else if (o.type=='textarea'){
if(v.length<a[i+1]){err=true}
}
if (err){s+='* '+a[i+3]+'\n'; err=false}
}
if (s!=''){alert('The required information is incomplete or contains errors:\t\t\t\t\t\n\n'+s)}
document.MM_returnValue = (s=='');
}
//-->
</script>
Form statement
<form action="SAR Form_Confirm.asp" method="post" name="form1"
onSubmit="YY_checkform('form1','Submitted By:','#q','0','Submitter name is required'
,'Date:','#q','0','You must enter a date'
,'Date:','^\([0-9]{2}\)\/\([0-9]{2}\)\/\([0-9]{4}\)$#2#1#3','3','Date is required in MM/DD/YYYY format'
,'Cost Center:','#q','1','Select what cost center you are from'
,'Activity Type','#q','1','Select at least one activity'
,'Customer Name(s):','#q','1','Enter the customer name(s)'
,'Account Number(s):','#q','0','Enter the customer account number(s)'
,'Detailed Description of Suspicious Activity','2','1','Enter a description of the suspicious activity'
,'Describe Customer Identification Documents','2','1','Describe the customer identification documents');return document.MM_returnValue">
Just because your colleague wants you to make his job easier does not mean you shouldn't write your HTML properly.
How about add an index to each check box such as:
<input type="checkbox" name="ActivityType0" value="Bank Secrecy Act/Structuring/Money Laundering">
<input type="checkbox" name="ActivityType1" value="Elder Financial Exploitation">
What if a user selected more than one box?
You can also use an array, if you really must use the same name for all checkbox fields.
<input type="checkbox" name="ActivityType[]" value="Bank Secrecy Act/Structuring/Money Laundering">
<input type="checkbox" name="ActivityType[]" value="Elder Financial Exploitation">
Notice, how I took out the blank space in the field's name.
It's a good habit to embrace because otherwise they are not valid JavaScript variables.
Your colleague can easily generate that form on the server-side.
I put the [] down where I am naming my checkboxes but it still did not work. name="ActivityType[]"
How should my posting part look? This is what it looks like now.
Thank you!!!
<form action="SAR Form_Confirm.asp" method="post" name="form1"
onSubmit="YY_checkform('form1','Submitted By:','#q','0','Submitter name is required'
,'Date:','#q','0','You must enter a date'
,'Date:','^\([0-9]{2}\)\/\([0-9]{2}\)\/\([0-9]{4}\)$#2#1#3','3','Date is required in MM/DD/YYYY format'
,'Cost Center:','#q','1','Select what cost center you are from' ,'ActivityType[]','#q','1','Select at least one activity' ,'Customer Name(s):','#q','1','Enter the customer name(s)'
,'Account Number(s):','#q','0','Enter the customer account number(s)'
,'Detailed Description of Suspicious Activity','2','1','Enter a description of the suspicious activity'
,'Describe Customer Identification Documents','2','1','Describe the customer identification documents');return document.MM_returnValue">
Do keep in mind when you are dealing with an array, then each element can be accessed through its index.
In your validation you need to loop through the array ActivityType to find out if at least one of the checkbox is ticked.
Bookmarks