Avatar billede jette1 Nybegynder
30. august 2001 - 18:26 Der er 3 kommentarer og
1 løsning

Mine funktioner går i selvsving..

Jeg har følgende formular og et dertil hørende javascript til validering.

Mit problem er at funktionerne går i selvsving. Hvis f.eks. man undlader at indtaste et fornavn og går videre til feltet efternavn, så vil check_fnavn() forsøge at give fnavn fokus, men det vil check_enavn() ikke acceptere, da den mister fokus uden indhold. De to alerts vises derfor på skift, og brugeren kan ikke komme ud af den \"onde cirkel\" ... hvordan kommer jeg uden om det?

<form action=\"<?php echo $PHP_SELF?>\" method=\"post\" name=\"opret_ny\">
Fornavn:<input class=\"field\" type=\"text\" name=\"fnavn\" size=\"20\" maxlength=\"20\" tabindex=\"1\" onBlur=\"check_fnavn(this.form)\">
Efternavn:<input type=\"text\" name=\"enavn\" size=\"20\" maxlength=\"30\" tabindex=\"2\" onBlur=\"check_enavn(this.form
Email:<input class=\"field\" type=\"text\" name=\"email\" size=\"20\" maxlength=\"20\" tabindex=\"3\" onBlur=\"check_email(this.form)\">
BrugerID:<input class=\"field\" type=\"text\" name=\"brugerID\" size=\"8\" maxlength=\"8\" tabindex=\"3\" onBlur=\"check_brugerID(this.form)\">
<input type=\"submit\" name=\"submit\" \"tabindex=\"5\" value=\"OK\">
<input type=\"hidden\" name=\"formnumber\" value=\"ny\">
</form>

<SCRIPT language=JavaScript1.2>

function check_fnavn(f) {
  var x = f.fnavn.value
  if (!x) {
    f.fnavn.focus();
    alert(\"Du skal indtaste dit fornavn\");         
    return false;
  }
  else if (x) {
    var x = x + \"q\";
    if (trim(x) == \"q\") {
        f.fnavn.focus();
        alert(\"Du skal indtaste dit fornavn\");       
    }
    return false;
  }
  else {
    return true;
  }   
}

function check_enavn(f) {
  var x = f.enavn.value
  if (!x) {
    f.enavn.focus();
    alert(\"Du skal indtaste dit efternavn\");
    return false;
  }
  else if (x) {
    var x = x + \"q\";
    if (trim(x) == \"q\") {
        f.enavn.focus();
        alert(\"Du skal indtaste dit efternavn\");
    }
    return false;
  }
  else {
    return true;
  }   
}

function check_email(f) {
  var x = f.email.value
  if (!x) {
    f.email.focus();
    alert(\"Du skal indtaste din email adresse\");
    return false;
  }
  else if (x) {
    var pattern = new RegExp(/^[a-zA-Z0-9]+@astongroup.com$/);
    var tjek = x.match( pattern );   
        if (!tjek) {
          f.email.focus();
          alert(\"Du skal indtaste en valid email adresse (*@astongroup.com)\");
          return false;
        }
        else {
          return true;
        }   
    }
}

function check_brugerID(f) {
  var x = f.brugerID.value
  if (!x) {
    f.brugerID.focus();
    alert(\"Du skal indtaste et brugerID\");
    return false;
  }
  else if (x) {
    var pattern = new RegExp(\"^[a-zA-Z0-9]{3,8}$\");
    var tjek = x.match( pattern );   
        if (!tjek) {
          f.brugerID.focus();
          alert(\"Du skal indtaste et brugerID bestående af mindst 3 tal og/eller bogstaver\");
          return false;
        }
        else {
          return true;
        }   
    }
}


function check_all(f) {
    if (check_fnavn(f) ||
        check_enavn(f) ||
        check_email(f) ||
        check_brugerID(f)) {
        return true;
    }
    else {
        history.go(-1);
        return false;
    }
}

function ltrim( s ) {
  var lpatt = new RegExp( \"^ *(.*)$\" );
  var parse = s.match( lpatt );
  return parse[1];
}

function rtrim( s ) {
  var rpatt = new RegExp( \"^(.*[^ ]) *$\" );
  var parse = s.match( rpatt );
  return parse[1];
}

function trim (string) {
  trimboth = ltrim( rtrim( string ) );
  return trimboth;
}
</SCRIPT>

Avatar billede roenving Novice
30. august 2001 - 18:33 #1
Nøjes med at checke onSubmit:

<form action=\"<?php echo $PHP_SELF?>\" method=\"post\" name=\"opret_ny\" onSubmit=\'return check_all(this);\'>
Fornavn:<input class=\"field\" type=\"text\" name=\"fnavn\" size=\"20\" maxlength=\"20\" tabindex=\"1\">
Efternavn:<input type=\"text\" name=\"enavn\" size=\"20\" maxlength=\"30\" tabindex=\"2\">
Email:<input class=\"field\" type=\"text\" name=\"email\" size=\"20\" maxlength=\"20\" tabindex=\"3\">
BrugerID:<input class=\"field\" type=\"text\" name=\"brugerID\" size=\"8\" maxlength=\"8\" tabindex=\"3\">
<input type=\"submit\" name=\"submit\" \"tabindex=\"5\" value=\"OK\">
<input type=\"hidden\" name=\"formnumber\" value=\"ny\">
</form>

Avatar billede roenving Novice
30. august 2001 - 18:38 #2
Hov ...
Så skal du også lige bygge din check_all-funktion om, for onSubmit sker før formen submittes, og der sker ingenting, hvis den får false retur.

Sådan noget som:

function check_all(f) {
  if (!check_fnavn(f)) return false;
  if (!check_enavn(f)) return false;
  if (!check_email(f)) return false;
  if (!check_brugerID(f)) return false;
  return true;
}

hth
jes
Avatar billede jette1 Nybegynder
30. august 2001 - 18:51 #3
Jeg har nu slettet alle tjek ved onBlur og har istedet indsat onSubmit=\"return check_all(this)\" i <form> ... men brugeren får nu ingen fejlmeddelelser. Er det fordi jeg skal flytte mine alert\'s til check_all()?

Og så lige et andet lille spørgsmål. Jeg vil gerne have at kodeafviklingen i funktionen check_all() stopper første gang den støder på en if der returnere falsk... hvordan gør jeg det?
Avatar billede roenving Novice
31. august 2001 - 14:42 #4
Til det første: Nej, det skulle ikke være nødvendigt, men jeg forstår ikke lige hvorfor den ikke er der ??

Return false stopper funktionen og returnerer, så det gør den allerede.
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