20. februar 2005 - 12:10Der er
23 kommentarer og 2 løsninger
Dynamisk form validering
Jeg har en form
I den form henter jeg x antal sæt af checkbokse
Feks: Sæt 1 = 6 checkbokse med navnet 1 Sæt 2 = 6 checkbokse med navnet 2
Antallet af sæt kender jeg ikke derfor looper jeg dem.
For hvert sæt checkbokse har jeg i databasen specificeret hvor mange af checkboksene der som minimum skal checkes af bruger.
Feks: Sæt 1 = 6 checkbokse med navnet 1 minimum 3 check Sæt 2 = 6 checkbokse med navnet 2 minimum 4 check
Når man så klikker på submit skal min validering undersøge om antallet af de checkbokse der skal checkes nu også er checked.
Jeg har fundet nedenstående script som måske kunne være et fundament men min javascript viden er ikke stor nok..desværre.
Koden er:
<script language="JavaScript"> function antalChecked(theform) { var antalOn = 0; if (document.all || document.getElementById) { for (i = 0; i < theform.length; i++) { var tempobj = theform.elements[i]; if (tempobj.name.toLowerCase() == "6" && tempobj.checked == true) antalOn = antalOn + 1; } } return antalOn; }
function validForm(theform) { var antal; antal = antalChecked(theform); if (antal < 7) { alert ("Minimum 7 skal vælges"); return false; } return true; } </script>
Hvis du skal gøre noget med javascript, skal oplysningen være til rådighed for javascript, altså enten skrevet et eller andet sted i dokumentet, hvor det kan aflæses, eller oprettet som javascript-variabel !-)
<script type="text/javascript"> var nums = new Array();
//Dette kan du lade dit databasescript udskrive nums['1'] = 3; nums['2'] = 4;
function valider(f){ for(a in nums){ if(antalChecked(f,a) < nums[a]){ alert('Fejl:\n\tFor få afkrydsninger i " + a); return false; } } }
function antalChecked(f,a){ var e = f.elements,numChecked=0; for(i=0;i<e.length;i++){ if(e[i].type=='checkbox'&&e[i].name==a&&e[i].checked) numChecked++; } return numChecked; } </script>
-- forøvrigt vil jeg dea anbefale, at du laver et anderledes navngivningsskema for dine checkbokse, da et tal først i en identifikator er ugyldig stort set alle andre steder, f.eks. som id eller javascript-variabel ...
Den siger at der er for få afkrydsninger lige meget hvormange man krydser...kn det være fordi løkken ikke laver et <bR> mellem numserne:-)
herunder er scriptet efter af løkken er kørt
<script type="text/javascript"> var nums = new Array(); nums['6'] = 4;nums['7'] = 5;
function valider(f){ for(a in nums){ if(antalChecked(f,a) < nums[a]){ alert('Fejl:\n\tFor få afkrydsninger i ' + a); return false; } } } function antalChecked(f,a){ var e = f.elements,numChecked=0; for(i=0;i<e.length;i++){ if(e[i].type=='checkbox'&&e[i].name==a&&e[i].checked) numChecked++; } return numChecked; }
hhhååårlllddd det virker!!!!! det var det der med at navngive afkrydsningsfelterne...
et lille tillægsspørgsmål som du kan vælge ikke at svare på men....
jeg har også et felt med fra databasen der hedder minimums bestilling som man kan udfylde hvis man skal bestille et bestemt antal varer...kan man inkoporere det i dit script....feltet den skal tjekke hedder antal og værdien har jeg i basen...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.