Avatar billede Slettet bruger
16. oktober 2005 - 18:33 Der er 13 kommentarer og
1 løsning

Chek felter i form inden afsendelse

Hejsa.

Jeg har 2 formularer (på hver sin web-side), hvori der er nogle felter som skal chekkes for om de er udfyldt korrekt, inden man kan sende data afsted:

==================================
Form A:
<textarea name="body">
Skal bare chekkes for, om der overhovedet er skrevet noget.

<input type="text" name="name">
Skal bare chekkes for, om der overhovedet er skrevet noget.

<input type="text" name="email">
Skal chekkes for, om der er skrevet en korrekt e-mail-adresse.

==================================
Form B:
<input type="text" name="recipient">
Skal chekkes for, om der er skrevet en korrekt e-mail-adresse.

<textarea name="body">
Skal bare chekkes for, om der overhovedet er skrevet noget.

<input type="text" name="name">
Skal bare chekkes for, om der overhovedet er skrevet noget.

<input type="text" name="email">
Skal chekkes for, om der er skrevet en korrekt e-mail-adresse.

==================================

Hvem kan hjælpe mig med det?
Avatar billede roenving Novice
16. oktober 2005 - 18:42 #1
<form name="formB" onsubmit="return valider(this);">

<script type="text/javascript">
function valider(f){
  if(f.bodyTxt.value==""){
    alert("Du skal skrive noget body-tekst");
    f.bodyTxt.focus();
    return false;
  }
  if(f.navn.value==""){
    alert("Du skal skrive dit navn");
    f.navn.focus();
    return false;
  }
  var reg = /^.*?@\w[\w.-]*\.[a-z]{2,6}$/i;
  if(!f.email.value.match(reg)){
    alert("Du skal skrive en gyldig email");
    f.email.focus();
    return false;
  }
  // Skal kun med på den ene side !-)
  if(!f.recipient.value.match(reg)){
    alert("Du skal skrive en gyldig modtager-email");
    f.recipient.focus();
    return false;
  }
  // Blok slut her
  return true;
}
</script>

-- bemærk, at jeg har lavet et par af feltnavnene om, da der i forvejen findes en property på document, der hedder body og fordi formen også har en name-property !-)
Avatar billede Slettet bruger
16. oktober 2005 - 18:46 #2
Aha!

Jammen, det er jo 2 forskellige formularer, på hver sin web-side. Skal det så ikke være 2 forskellige JavaScripts? Eller lægger jeg JavaScriptet som en include-fil?
...jeg tror desværre, at vi er gået lidt forbi hinanden, Roenving...  :-(
Avatar billede Slettet bruger
16. oktober 2005 - 18:48 #3
...altså formular A på den ene webside, og formular B på den anden web-side.  ;-)
Avatar billede roenving Novice
16. oktober 2005 - 18:53 #4
-- bemærk de to kommentar-linjer i scriptet !-)
Avatar billede Slettet bruger
16. oktober 2005 - 18:58 #5
Nåååe! Ja, nu ser jeg det søremig! :-)

Mange tak, kode-supermand!!! :-)

Kast venligst et svar herind, så jeg kan tildele dig points for dit fine script! :-)
Avatar billede Slettet bruger
16. oktober 2005 - 19:02 #6
Øh... kan man ikke gemme scriptet væk som en .js include-fil, tror du? Eller skal der "kaldes på det", på et bestemt sted i dokumentet?
Jeg plejer nemlig altid at gemme alle JavaScript-filer og CSS-filer i seperate mapper.  :-)
Avatar billede roenving Novice
16. oktober 2005 - 19:02 #7
Velbekomme '-)

-- og vær opmærksom på, at specielt feltnavne som name og submit giver voldsomme problemer pga. sammenfaldet med andre properties eller metoder (body er det bare ikke smart at bruge nogen steder !-)
Avatar billede roenving Novice
16. oktober 2005 - 19:05 #8
Jo, og du kan også bruge det samme script således:

checkForm.js:

function valider(f){
  if(f.bodyTxt.value==""){
    alert("Du skal skrive noget body-tekst");
    f.bodyTxt.focus();
    return false;
  }
  if(f.navn.value==""){
    alert("Du skal skrive dit navn");
    f.navn.focus();
    return false;
  }
  var reg = /^.*?@\w[\w.-]*\.[a-z]{2,6}$/i;
  if(!f.email.value.match(reg)){
    alert("Du skal skrive en gyldig email");
    f.email.focus();
    return false;
  }

  //Bemærk, at du skal sørge for forskellige navne på formene !-)
  if(f.name=='formB' && !f.recipient.value.match(reg)){
    alert("Du skal skrive en gyldig modtager-email");
    f.recipient.focus();
    return false;
  }

  return true;
}

-- og så:

<script type="text/javascript" src="checkForm.js"></script>
Avatar billede Slettet bruger
16. oktober 2005 - 19:17 #9
Igen: Mange tak!  :-)

Jepper, jeg ved godt at feltnavnene absolut ikke er de mest hensigtsmæsige, men det er et færdigt script jeg har overtaget, og er ved at modificere.
Og når jeg skifter over til MySQL-databasen, så SKAL jeg til at lave feltnavnene om. Men der er dælemig så mange steder jeg skal reparere, så jeg venter lidt med den del. Nu skal jeg bare have det til at virke ordentligt først, så finpudser jeg bagefter  :-)
Avatar billede Slettet bruger
16. oktober 2005 - 19:20 #10
...er det ikke regular expression du har brugt, til at validere E-mail-feltet med? Smart! :-)
Avatar billede roenving Novice
16. oktober 2005 - 19:20 #11
Men allerede her støder du ind i fejl, for hvis du har et felt med navnet name, vil du ikke have mulighed for at kontrollere formens navn !-)

-- og tak for point ;~}
Avatar billede roenving Novice
16. oktober 2005 - 19:21 #12
Jo, en regExp er ret indlysende at bruge til email-validering !o]
Avatar billede Slettet bruger
16. oktober 2005 - 19:28 #13
*suk* Ja, så må jeg nok til at kaste lidt rundt med feltnavnene, for jeg er afhænig af at formen kan valideres via javascriptet - ellers kommer der nemlig fejl hvis folk ikke skriver korrekt i mail-felterne, fordi der sendes via JMail.
Avatar billede roenving Novice
17. oktober 2005 - 04:07 #14
Det er så muligt at få fat i et element uden at adressere det som direkte property, men lad alligevel være med at forlade dig på den slags tåbeligheder ...

f.elements["name"] burde ikke give problemer med formens name-property !-)

-- men jeg vil igen understrege, forlad dig ikke på den slags, sørg for at alle identifikatorer ikke er forvekslelige !o]

-- standard-tåbeligheden hedder en frame med navnet 'top', hvilket i javascript henviser til det alleryderste window-element ...
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