Avatar billede fojensen Nybegynder
07. juli 2004 - 15:34 Der er 19 kommentarer og
1 løsning

funktionskald med variabler

Hej Javascript-eksperter !

Jeg arbejder stadig på testplan med validering af formular, og vil gerne kalde funktionen valider() med nogle variabler, men det virker ikke.
Nedenstående virker med de første 2 variabler ( en for formularens navn, og en værdi for hvad der skal tjekkes.
-----kode-----
function valider(f,mode){
  if (mode==1)
  {
    if(f.brugernavn.value=="")
    {
    alert("feltet skal udfyldes");
    f.brugernavn.select();
    f.brugernavn.focus();
    return false;
    }
  }
  else
  {
    if(f.brugernavn.value!="Peter"){
    alert("navnet skal være 'Peter' ");
    f.brugernavn.select();
    f.brugernavn.focus();
    }
    return false;
  }
}
-----/kode-----

Hvis jeg nu vil tilføje en variabel for feltnavnet, så virker det ikke...
-----kode-----
function valider(f,e,mode){
  if (mode==1)
  {
    if(f.e.value=="")
    {
    alert("feltet skal udfyldes");
    f.e.select();
    f.e.focus();
    return false;
    }
  }
  else
  {
    if(f.e.value!="Peter"){
    alert("navnet skal være 'Peter' ");
    f.e.select();
    f.e.focus();
    }
    return false;
  }
}
-----/kode-----

jeg kalder koden med eksempelvis
<INPUT name="brugernavn" size=45 onblur="valider(min_formular,brugernavn,1);">

kan nogen hjælpe mig videre ???
Avatar billede mm12010 Nybegynder
07. juli 2004 - 15:39 #1
alle:
  f.e.
erstattes med:
  f.elements[e].
Avatar billede mm12010 Nybegynder
07. juli 2004 - 15:41 #2
egentligt burde de erstattes med:
  document.forms[f].elements[e].
hvis du kun sender navnene, og ikke en objektreference, med i funktionskaldet
Avatar billede fojensen Nybegynder
07. juli 2004 - 15:52 #3
melder: Der opstod en fejl på siden...
jeg har prøvet begge varianter, og jeg har også afprøvet funktionskaldet:
<INPUT name="brugernavn" size=45 onblur="valider(document.forms[min_formular],elements[brugernavn],1);">

mvh folmer
Avatar billede mm12010 Nybegynder
07. juli 2004 - 16:48 #4
denne i funktionen:
document.forms[f].elements[e].

og sådan i funktionskaldet:
onblur="valider('min_formular','brugernavn',1);"
Avatar billede fojensen Nybegynder
07. juli 2004 - 18:27 #5
Det var det rigtige 'svar' - dvs. smid lige et svar - der ryger points på din konto...

Jeg skal teste lidt videre, og det jeg mener at have set noget i retning af:
document.forms[this].elements[this]
er der noget om snakken - kan jeg evt. få nogen tips ???

ellers bare - tak for hjælpen...
mvh. folmer
Avatar billede roenving Novice
07. juli 2004 - 21:08 #6
<INPUT name="brugernavn" size=45 onblur="valider(this,1);">

function valider(e,mode){
  if (mode==1){
    if(e.value==""){
      alert("feltet skal udfyldes");
      e.select();
      e.focus();
      return false;
    }
  }else{
    if(e.value!="Peter"){
      alert("navnet skal være 'Peter' ");
      e.select();
      e.focus();
      return false;
    }
  }
}
Avatar billede fojensen Nybegynder
07. juli 2004 - 21:31 #7
Tak til roenving - det er jo dejligt enkelt... var det mon noget af det mm12010 mente med 'objektreference i funktionskaldet' ?

Det næste jeg kunne finde på at prøve er en test af om det indtastede i et felt indeholder både nogle tegn og et '@'.

Hvordan putter man disse tjek med regular expressions ind i koden ?

mvh folmer
Avatar billede fojensen Nybegynder
07. juli 2004 - 22:14 #8
jeg har forsøgt selv med noget jeg bruger fra php-programmering, men det virker ikke:
    if(!ereg("[A-z0-9]+@", e.value)){
      alert("navnet skal være en email med et '@' ");
      e.select();
      e.focus();
      return false;
    }

nogen der har det rigtige...
Avatar billede mm12010 Nybegynder
07. juli 2004 - 22:19 #9
if(!e.value.match(/^[\w]{1}[\w\.\-]*@[a-z0-9æøåäöüé]{1}[a-z0-9\-\.æøåäöüé]*\.[a-z]{2,6}$/i)){
Avatar billede mm12010 Nybegynder
07. juli 2004 - 22:21 #10
if(!e.value.match(/^[\w][\w\.\-]*@[a-z0-9æøåäöüé][a-z0-9\-\.æøåäöüé]*\.[a-z]{2,6}$/i)){
Avatar billede roenving Novice
07. juli 2004 - 22:21 #11
I javascript kan du enten konstruere en regexp som et object eller angive det bogstaveligt, her ligner det, at den bogstavelige er nemmest, men jeg har en solid ting, som burde være voldsomt fremtidssikret:

    var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
    var regexp = new RegExp("^["+t+"]["+t+"\\.\\-]*@["+t+"]["+t+"\\.\\-]*\\.["+t+"]{2,}$","i");
    if(!regexp.test(e.value)){
      alert("navnet skal være en gyldig email");
      e.select();
      e.focus();
      return false;
    }
Avatar billede mm12010 Nybegynder
07. juli 2004 - 22:26 #12
roenving >> er alle de tegn virkelig lovlige på alle pladser?
Avatar billede roenving Novice
07. juli 2004 - 22:31 #13
Egentlig ikke i top-domænet, men ellers er de faktisk, ja ...

-- der er nu stadig en masse steder rundt om på nettet, hvor de fungerer dårligt, f.eks. også i Internet Explorer, som kræver en plugin, så det skulle ikke undre mig om også Outlook/Express havde problemer ...

-- men er de principielt lovlige skal de vel også godkendes !-)

-- og så må jeg jo hellere rette den til, for i øjeblikket er det længste top-domæne 'museum', så det bliver:

    var regexp = new RegExp("^["+t+"]["+t+"\\.\\-]*@["+t+"]["+t+"\\.\\-]*\\.[\\w]{2,6}$","i");
Avatar billede roenving Novice
07. juli 2004 - 22:34 #14
-- og lige for at checke en, som den ikke tager højde for (malplacerede punktummer !-)

    if(!regexp.test(e.value)||/(\.@|@\.|\.\.)/g.test(e.value)){

-- jeg kan ikke huske om reglerne tillader bindestreger alle steder, men hvis ikke kan de jo også inkorporeres !-)
Avatar billede mm12010 Nybegynder
07. juli 2004 - 23:05 #15
bør den sidste ikke være:
  if(!regexp.test(e.value)||/(\-\-|\.\.)/g.test(e.value)){
iflg mine oplysninger heller ikke dobbelte bindstreger, og der er jo 2 tegn-grupper både før og efter @'et...
Avatar billede roenving Novice
07. juli 2004 - 23:14 #16
Tjah, så skal man måske, da det ikke kan betale sig at forhindre punktummer og bindestreg foran @-tegnet på andre måder:

  if(!regexp.test(e.value)||/(\.@|\-@|\-\-|\.\.)/g.test(e.value)){
Avatar billede mm12010 Nybegynder
07. juli 2004 - 23:19 #17
tror du så vi med rette kan kalde det den bedste mail-validator til dato ?-)
Avatar billede roenving Novice
07. juli 2004 - 23:20 #18
*lol*

-- sikkert !-)
Avatar billede fojensen Nybegynder
08. juli 2004 - 00:06 #19
Der har rigtig været gang i regexp mens jeg har været fraværende et par timer...

Jeg havde nu ikke tænkt mig en særlig avanceret validering her men kun et tjek på at feltet indeholder et @ og nogle tegn, og at der ikke er puttet 2 emailadresser i feltet, men nu har jeg set en masse eksempler på hvordan regexp placeres, så jeg prøver at finde min løsning ud fra det tak til både mm12010 og roeving.

mvh. Folmer
Avatar billede mm12010 Nybegynder
08. juli 2004 - 08:21 #20
selv tak :o)
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