Avatar billede wampiro-uha Nybegynder
26. februar 2004 - 19:53 Der er 15 kommentarer og
1 løsning

Tjek forskellige forms med samme kode!

Title er måske lidt underlig.

Er det ikke muligt at i en javascript-fil (.js), som jeg henter en i hovedet af mit html-dokument, at erklære hvad f.eks. et brugernavn må indeholde.
F.eks.:

if (!(document.register.username.value.length >= 3 && document.register.username.value.length <= 20 && document.register.username.value.match(/^[a-z0-9_\-]+$/i))) {
alert('Please specify a valid username!');
document.register.username.focus();
return false; }

Og så have en masse forskellige erklæringer af hvad forskellige ting på indeholde.

Og så i hver enkelt form jeg har (login, oprettelse af bruger osv.) at angive hvilke felter i formen der skal tjekkes for hvad?

Således at jeg faktisk bruger den samme kode for hvad et brugernavn må indeholde til forskellige forms?

Og det skal være let, enkelt og godt ;-)
Avatar billede googolplex Novice
26. februar 2004 - 20:02 #1
Hvornår vil du validere dine felter, når der trykkes på submit eller løbende mens der indtastes ?
Avatar billede wampiro-uha Nybegynder
26. februar 2004 - 20:37 #2
Når der trykkes på submit :-)
Avatar billede o-zone Nybegynder
26. februar 2004 - 22:41 #3
Det kan sagtens lade sig gøre, men hvis det også skal være let og kønt... :-/
Det begynder at ligne en regulær programmeringsopgave :o
Avatar billede skovenborg Nybegynder
26. februar 2004 - 23:09 #4
o-zone har nok ret i at det bliver svært at gøre det kønt. Har selv bakset lidt med noget og kom frem med dette, programmeringsmæssigt grimme, stykke kode:
<script type="text/javascript">
function validateForm() {
        var i=0;
        var currentElm;
        var currentAlert;
        var currentElmValid = true;
        var validForm = true;
        while (i<arguments.length) {
              if (typeof arguments[i] == "object" && arguments[i].toString().indexOf("/") == -1) {
                  currentElm = arguments[i];i++;
                  if (!currentElmValid) {
                      validForm = false;
                      if (currentAlert) {alert(currentAlert);}
                  }
                  currentElmValid = true;
              }
              else {

                  if (typeof arguments[i] == "string") {
                  switch (arguments[i].toString().slice(0,arguments[i].indexOf("="))) {
                      case "max" : if (currentElm.value.length > parseInt(arguments[i].slice(arguments[i].indexOf("=")+1))) currentElmValid = false;break;
                      case "min" : if (currentElm.value.length < parseInt(arguments[i].slice(arguments[i].indexOf("=")+1))) currentElmValid = false;break;
                      case "alert" : currentAlert = arguments[i].slice(arguments[i].indexOf("=")+1);break;
                  }
                  }
                  else if (arguments[i].toString().indexOf("/") == 0 && currentElm.value.search(arguments[i]) == -1) {currentElmValid = false;i++;continue;}
                  else;
                  i++;
              }
        }
        if (!currentElmValid) {
            validForm = false;
            if (currentAlert) {alert(currentAlert);}
        }
        return validForm;
    }
</script>

<form name="form2" onsubmit="return validateForm(this.brugernavn,'alert=Du skal udfylde brugernavnet korrekt','min=3',/^[0-9]+$/i,this.password,'max=8','min=3','alert=Du skal udfylde password korrekt');">
Brugernavn:<input type="text" name="brugernavn">
Password:<input type="text" name="password">
<input type="submit" name="submit">
</form>
Avatar billede wampiro-uha Nybegynder
27. februar 2004 - 10:53 #5
Hmm, nej det er ikke pænt ;-)
Kan det virkelig ikke gøres pænere?

Det gør ikke så meget at jeg skriver i min form hvad der skal tjekkes. Jeg kan godt lave en function f.eks. loginForm(), som så indeholde det der skal tjekkes og så kører jeg bare den når der trykkes på submit.

Men i loginForm skal der henvises til de tidligere kode med brugernavn osv., så jeg kan har dem ét sted.
Avatar billede skovenborg Nybegynder
27. februar 2004 - 14:55 #6
hva' tænker du på når du vil have din funktion til at henvise til tidligere kode?
Avatar billede wampiro-uha Nybegynder
27. februar 2004 - 15:34 #7
Det er bare således at når jeg skriver hvad f.eks. et brugernavn skal indeholde, så skal jeg kun skrive det ét sted.

Sådan at jeg ikke laver den fejl at et brugernavn kan indeholde noget ét sted og noget ét andet sted. Altså for ikke at lave det samme arbejde flere gang end højst nødvendigt ;-)
Avatar billede skovenborg Nybegynder
27. februar 2004 - 15:57 #8
du kunne vel gøre lidt det samme som din oprindelige funktion, men blot i stedet for at skrive:
document.register.username bruger document.getElementsByName("username")[0] - eller hvis du har en id: document.getElementById("username")
På den måde kan dit script virke på endhver side bare du kalder din loginboks for username - hvad enten det er en id eller en name.
Avatar billede wampiro-uha Nybegynder
27. februar 2004 - 16:30 #9
Jeg skal vel stadig på en eller anden måde fortælle hvad login-formen skal tjekkes for.
Den indeholder jo kun brugernavn og kodeord, hvorimod min registrerings-form indeholder meget andet?

Og hvad gør [0] i slutningen af din løsning?
Avatar billede skovenborg Nybegynder
27. februar 2004 - 16:46 #10
det er fordi getElementsByName returnerer et array (egentlig er det et HtmlCollection object som de kalder det, men fungerer på samme måde) med alle elementer der har navnet "username". Normalt er name jo ikke kun tilgengængeligt for ét element ligesom id. Jeg regner dog med at du kun havde et element med dette navn, og derfor tager man bare det først - og eneste - element fra dette array.
Avatar billede wampiro-uha Nybegynder
27. februar 2004 - 19:13 #11
Ok, men havde du en idé til hvorledes jeg kan fortælle hvad de forskellige forms skal tjekkes for, nemt?
Avatar billede thesurfer Nybegynder
28. februar 2004 - 02:36 #12
Jeg tror at det ville være meget nemmere, hvis du smed 2-3 forms her ind.. Så kan man bedre se hvordan det hele hænger sammen, og man kan derfor nemmere finde en løsning..
Avatar billede wampiro-uha Nybegynder
28. februar 2004 - 10:50 #13
// ---------- check_login ------------------------------------------------------------------------------------------ //
function check_login() {
if (!(document.login.username.value.length >= 3 && document.login.username.value.length <= 20 && document.login.username.value.match(/^[a-z0-9_\-]+$/i))) {
alert('Please specify a valid username!');
document.login.username.focus();
return false; }

if (!(document.login.password.value.length >= 6 && document.login.password.value.length <= 20)) {
alert('Please specify a valid password!');
document.login.password.focus();
return false; }

document.login.submit(); }

// ---------- check_contact ---------------------------------------------------------------------------------------- //
function check_contact() {
if (!(document.contact.subject.value.length >= 3 && document.contact.subject.value.length <= 100)) {
alert('Please specify a valid subject!');
document.contact.subject.focus();
return false; }

if (!(document.contact.content.value.length >= 3)) {
alert('Please specify a valid content!');
document.contact.content.focus();
return false; }

document.contact.submit(); }

// ---------- check_register --------------------------------------------------------------------------------------- //
function check_register() {
if (!(document.register.username.value.length >= 3 && document.register.username.value.length <= 20 && document.register.username.value.match(/^[a-z0-9_\-]+$/i))) {
alert('Please specify a valid username!');
document.register.username.focus();
return false; }

if (!(document.register.email.value.match(/^[a-z0-9_\-\.]+@[a-z0-9_\-\.]+\.[a-z0-9_\-\.]+$/i))) {
alert('Please specify a valid e-mail!');
document.register.email.focus();
return false; }

if (!(document.register.gender.value > 0)) {
alert('Please specify a valid gender!');
document.register.gender.focus();
return false; }

if (!(document.register.age.value > 0)) {
alert('Please specify a valid age!');
document.register.age.focus();
return false; }

if (!(document.register.country.value > 0)) {
alert('Please specify a valid country!');
document.register.country.focus();
return false; }

document.register.submit(); }
Avatar billede thesurfer Nybegynder
28. februar 2004 - 13:21 #14
Hvor mange submit-knapper er der? Er der kun 1 eller er der 1 submit-knap til hver form?
Avatar billede wampiro-uha Nybegynder
29. februar 2004 - 18:21 #15
Der er submit knapper til hver form.
Men jeg har kun én form på hver side :-)
Avatar billede wampiro-uha Nybegynder
03. marts 2004 - 17:22 #16
Hmmm. Lukker! Desværre!
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