Avatar billede spidr Nybegynder
05. januar 2004 - 19:20 Der er 12 kommentarer og
1 løsning

Validering af form

Ja, bare roligt jeg har kigget på andres spørgsmål, men ingen ser ud til at ville have det samme som mig :)

Det jeg mangler er et script der tjekker om der står noget i alle formens felter, og så skriver en besked lige ved siden af submit knapper hvis de ikke har, og hvis de har udflydt alt skal siden bare fortsætte med at sende formlen.
Men det der er vigtigt er at den kommer med en besked lige ved siden af submit knappen, og ikke en "pop up" :)

Hvis nogen gider lave et exempel, med det hele, så skal jeg nok få kodet det, så det passer til mit script ;)

PÅ forhånd tusind tak ;)
Avatar billede thesurfer Nybegynder
05. januar 2004 - 19:36 #1
Jeg lavede engang noget ligende.. men få rettelser, kan du sikkert bruge det :)

<SCRIPT text="text/JavaScript">
<!--

function validate(f)
{
// checkpoint-boolean-switch-ting:
var ok = "ja";

// navnene på de felter der *SKAL* udfyldes:
var skal_udfyldes = new Array("fornavn", "efternavn", "adresse", "email");

el = f.elements;
for(var i=0;i<el.length - 1;i++){
  for (var a=0; a < skal_udfyldes.length; a++) {
    if ( (el[i].name == skal_udfyldes[a]) && (el[i].value.length == 0) && (el[i].type == "text") ) {
      ok = "nej";
    }
  }
}

if (ok == "nej") {
  document.getElementById("msg").innerHTML = " Du skal udfylde alle felter markeret med * !";
  return false;
} else {
  return true;
}

}
//-->
</SCRIPT>

<form name="frminfo" action="videre.htm" method="post" onSubmit="return validate(this)">
<br>Fornavn: <input type="text" name="fornavn" value=""> *
<br>Efternavn: <input type="text" name="efternavn" value=""> *
<br>Adresse: <input type="text" name="adresse" value=""> *
<br>Email: <input type="text" name="email" value=""> *
<br>Website: <input type="text" name="website" value="webby">
<br>Mobilnr: <input type="text" name="mobilnummer" value="mobi">
<br><input type="submit" value="Send Oplysninger!">
<span id="msg"></span>
</form>
Avatar billede spidr Nybegynder
07. januar 2004 - 17:55 #2
ja det er super ;)
Nu har jeg ændret det til:
<SCRIPT text="text/JavaScript">
<!--

function validate(f)
{
// checkpoint-boolean-switch-ting:
var ok = "ja";

// navnene på de felter der *SKAL* udfyldes:
var skal_udfyldes = new Array("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9", "Q10", "Q11", "Q12", "Q13", "Q14", "Q15", "Q16", "Q17", "Q18", "Q19", "Q21", "Q22", "Q23", "Q24", "Q25", "Q26", "Q27", "Q28", "Q29", "Q30");

el = f.elements;
for(var i=0;i<el.length - 1;i++){
  for (var a=0; a < skal_udfyldes.length; a++) {
    if ( (el[i].name == skal_udfyldes[a]) && (el[i].value.length == 0) && (el[i].type == "text", "hidden") ) {
      ok = "nej";
    }
  }
}

if (ok == "nej") {
  document.getElementById("msg").innerHTML = " <b>Du skal svare på alle spørgsmål!</b>";
  return false;
} else {
  return true;
}

}
//-->
</SCRIPT>
Men tænkte på om det er muligt at lave det lidt mere "individuelt" hvis man kan sige sådan, sådan at man f.eks. skal have @ af med i emailen og sådaN? :)
Og evt. en lille hjælp til HVOR de har glæmt at udfylde, min form er MEGET lang, så hvis man kunne skrive hvor du havde glæmt at svare ville det være super, kan det lade sig gøre?
Avatar billede thesurfer Nybegynder
07. januar 2004 - 18:27 #3
De fleste ting kan lade sig gøre :)
Jeg kigger på det senere.. :)
Avatar billede spidr Nybegynder
07. januar 2004 - 18:29 #4
Tusind tak :D:D
Avatar billede thesurfer Nybegynder
07. januar 2004 - 20:15 #5
Denne udgave skriver hvilke felter det er der mangler, plus den check om der er et "@" i email feltet.
I eksemplet er Email feltet "Q5".. det skal manuelt rettes til her:
if (f.Q5.value.indexOf("@") == -1) mangler += "- Email<br>";

Det nye ved denne udgave, er formatet af skal_udfyldes arrayen.. formatet er:
"Titel 1", "FeltNavn 1", "Titel 2", "Feltnavn 2"

F.eks.:
"Fornavn", "navnet på feltet hvor Fornavn skal skrives", "Efternavn", "navnet på feltet hvor Efternavn skal skrives".

Fra starten af, var det sådan at man havde 2 arrays, med 30 felter hver :)
1 array til feltnavne, og 1 array til "title".. det ville være svært for dig at holde styr, så jeg lavede den om..

Endnu en tilføjelse er at, manglede felter vises i en boks (uden ramme). Dvs de er samme sted lodret/vertikalt. Det sker her:
<span id="msg" style="position: absolute"></span>
Hvis du ikke synes om det, fjerner du bare: style="position: absolute"

Alle navnene i script er case-sensitive, dvs der er forskel på store og små bogstaver.
F.eks:
"Hej" er ikke det samme som "hEJ", "HeJ", "HEj", osv.. Husk det! :)


- Håber at det er noget du kan bruge! :)


Selve scriptet:

<script type="text/JavaScript">
<!--

function validate(f)
{
var mangler = "";

// Format: "Titel 1", "FeltNavn 1", "Titel 2", "Feltnavn 2", osv..
var skal_udfyldes = new Array("Fornavn", "Q1", "Efternavn", "Q2", "Adresse", "Q3", "Website", "Q4", "Email" , "Q5");

el = f.elements;
for(var i=0;i<el.length - 1;i++){
  for (var a=0; a < skal_udfyldes.length ; a++) {
  a++;
    if ( (el[i].name == skal_udfyldes[a]) && (el[i].value.length == 0) && (el[i].type == "text", "hidden") ) {
      mangler += "- " + skal_udfyldes[a - 1] + "<br>";
    }
  }
}

// 1) Ret "Q5" til det korrekt feltnavn til Email feltet.
// 2) Ret fejlmeddelelsen for "Email". I dette eksempel er det "Email" (case-sensitive)
if (f.Q5.value.indexOf("@") == -1 && mangler.indexOf("Email") == -1) mangler += "- Email<br>";

if (mangler != "") {
  mangler = mangler.substring(0, mangler.length - 4); // fjern det sidste "<br>"
  mangler = "Du mangler at udfylde følgende felter:<br>" + mangler;
  document.getElementById("msg").innerHTML = mangler; //" <b>Du skal svare på alle spørgsmål!</b>";
  return false;
} else {
  return true;
}

}

//-->
</script>

Her er et eksempel på en form:
<br><br>

<form onSubmit="return validate(this)" method="post">
Fornavn: <input type="text" name="Q1" value="">
<br>Efternavn: <input type="text" name="Q2" value="">
<br>Adresse: <input type="text" name="Q3" value="">
<br>Website: <input type="text" name="Q4" value="">
<br>Email: <input type="text" name="Q5" value="">
<br><input type="submit" name="Submit" value="Send oplysningerne!">&nbsp;
<span id="msg" style="position: absolute"></span>
</form>
Avatar billede thesurfer Nybegynder
07. januar 2004 - 20:21 #6
Du skal nok have smækket en action="en-eller-anden-side" inde i:
<form onSubmit="return validate(this)" method="post">

Men det kunne du sikkert godt regne ud ;-)
Avatar billede thesurfer Nybegynder
07. januar 2004 - 20:22 #7
Jeg smider lige et svar.. når du har testet løsningen, og mener at den er "god nok", kan du acceptere svaret :-)
/theSurfer.
Avatar billede spidr Nybegynder
07. januar 2004 - 20:31 #8
Tusind tak det ser jo godt ud, det vil jeg teste med det vuns :P
Avatar billede spidr Nybegynder
07. januar 2004 - 21:15 #9
Tror der er en fejl, se mit script på www.goog.dk/mylove/test.php heh ved godt den er lidt skumler :P
Men altså den tager ikke q30 med og det har jeg altså taget med i koden :S
Avatar billede thesurfer Nybegynder
07. januar 2004 - 21:28 #10
Yeps.. har fundet fejl.. glemte at forklare dig 4-tallet i:
mangler = mangler.substring(0, mangler.length - 4);

4-tallet er længden på det du smider efter feltnavn.. "<br>" = 4 tegn

Du har lavet det om til ", " som er på 2 tegn, derfor:
mangler = mangler.substring(0, mangler.length - 2);
Avatar billede spidr Nybegynder
07. januar 2004 - 21:32 #11
smart :P
Avatar billede spidr Nybegynder
07. januar 2004 - 21:33 #12
Feedt nu virker det, tusind tak :D:D
Avatar billede thesurfer Nybegynder
07. januar 2004 - 21:36 #13
Takker for points! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Rambøll Management Consulting

Senior Software Engineer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger analytisk stærk og erfaren medarbejder i Hvidovre

Capgemini Danmark A/S

Client Partner