18. juni 2004 - 13:20Der er
11 kommentarer og 1 løsning
Validering af formular
<html> <head> <title>Nyt dokument</title> <meta name="generator" content="WebCoder"> </head> <script> function check(form){ if(form.dato.value==""){ alert("Du skal skrive en dato"); form.dato.focus(); return (false);}
-jeg har en formular med ovenstående udseende. Hvordan laver jeg valideringen så den tester på felterne parvis, altså er dato og tekst udfyldt i hver linie? -og at det er tilladt at en linie kan være blank.
prøv: function check(frm) { for (i=0;i<frm.length;i+=2) { if (frm.elements[i].value.match(/\d/) && !frm.elements[i+1].value.match(/\S/)) { alert("Du skal skrive en tekst til din dato"); frm.elements[i+1].focus(); return false; } if (!frm.elements[i].value.match(/\d/) && frm.elements[i+1].value.match(/\S/)) { alert("Du skal skrive en dato til din tekst"); frm.elements[i].focus(); return false; } } return true; }
Jeg troede jeg så kunne finde ud af at fortsætte med resten af formularen, men ak! Hvis jeg tilføjer 2 checkboxe efter hver tekstlinie, hvilke korrektioner skal jeg så foretage i scriptkoden? (der skal ikke være nogen syntaxkontrol på chechboxene).
nej, det rigtigt det spurgte du også om før - glemte at forklare det.
i er her en del af det loop, som hedder: for (i=0;i<frm.length;i+=2) { Hvilket vil sige, at man først sætter i til 0 og så længe i er lavere end antallet af elementer i formen så skal der lægges to til i (eller fire som i sidste tilfælde). i bruges her som et slags index i din form - men ikke noget du skal ændre i. Når i er 0 tager den det første element (dato1) og checker den, samt det næste (i+1 - altså her tekst1). Hvis én af dem er udfyldt og den anden ikke er, så giver den så en fejl - hvis ikke går den videre i loopet og lægger to til i (som sagt tidligere). Den gennemløber altså alle felterne i din form, indtil der kommer en fejl eller i er ligeså stor eller større end antallet af formelementer. ---Håber det gav lidt forklaring på scriptet.
At det ikke virker er dog lidt mærkeligt, men så må vi også sætte en lille ekstra ting på, så den også tester om elementerne overhovedet har navnet dato og tekst: <script type="text/javascript"> function check(frm) { for (i=0;i<frm.length;i+=2) { if (frm.elements[i].name == "dato" && frm.elements[i+1].name == "tekst") { if (frm.elements[i].value.match(/\d/) && !frm.elements[i+1].value.match(/\S/)) { alert("Du skal skrive en tekst til din dato"); frm.elements[i+1].focus(); return false; } if (!frm.elements[i].value.match(/\d/) && frm.elements[i+1].value.match(/\S/)) { alert("Du skal skrive en dato til din tekst"); frm.elements[i].focus(); return false; } } } return true; } </script> </head> <body> <form onsubmit="return check(this);"> <b>Dato1:<input name="dato" size="8"></b><b>Tekst1:</b><input name="tekst" size="75" maxlength="300"><input type="checkbox" name="aarlig0_1"><input type="checkbox" name="aarlig0"><br /> <b>Dato2:<input name="dato" size="8"></b><b>Tekst2:</b><input name="tekst" size="75" maxlength="300"><input type="checkbox" name="aarlig1"><input type="checkbox" name="aarlig1_1"><br /> <b>Dato3:<input name="dato" size="8"></b><b>Tekst3:</b><input name="tekst" size="75" maxlength="300"><input type="checkbox" name="aarlig2"><input type="checkbox" name="aarlig2_1"><br /> <b>Dato4:<input name="dato" size="8"></b><b>Tekst4:</b><input name="tekst" size="75" maxlength="300"><input type="checkbox" name="aarlig3"><input type="checkbox" name="aarlig3_1"><br /> <input type="submit" /> </form>
men hvis din form ser akkurat sådan ud, som den står her, så kan du burde du også kunne skrive: for (i=0;i<frm.length;i+=4) {
Hvis du dog har nogle andre elementer i starten, kan det også være en fordel at skrive: for (i=0;i<frm.length;i++) { (så den kun lægger én til per gang) eller starte med i med en højere værdi: for (i=1;i<frm.length;i+=2) // Starter med at teste andet form-element (fx hvis det er her dato og tekst- elementerne starter. Husk at elementernes index starter med 0 for det første element.
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.