Avatar billede shylle Nybegynder
03. maj 2000 - 13:18 Der er 13 kommentarer og
1 løsning

Validering af et formfelt

Jeg skal validere et formfelt, som kun må indeholde tal. Hvordan gøres det i JavaScript?

  /SHylle
Avatar billede erikjacobsen Ekspert
03. maj 2000 - 13:41 #1
Du laver en valideringsfunktion:

function validate(f) {
var lovlig = "0123456789";

for (i=0; i<f.talfelt.length; i++){
  if (lovlige.indexOf(f.talfelt.charAt(i)) < 0)) {
    alert("Navnet kan kun bestå af bogstaver");
    f.talfelt.focus();               
    return false;
  }
}
return true;
}

og i formen skriver du

<form name="ff" action="..." onsubmit="return validate(document.ff);">
....
Avatar billede shylle Nybegynder
03. maj 2000 - 15:37 #2
Jeg kan sgu ikke få det til at virke.

Nu er jeg jo ingen JavaScript ekspert, men jeg har lavet nogle ændringer i scriptet, så det nu ser således ud:

1 function validate(f) {
2 var lovlig = "0123456789";
3
4 for (i=0; i<f.Pris.length; i++){
5  if (lovlig.indexOf(f.Pris.charAt(i)) < 0) {
6    alert("Navnet kan kun bestå af bogstaver");
7    f.Pris.focus();               
8    return false;
9  }
10 }
11 return true;
12 }

I linie 5 var der en parentes for meget og der stod "lovlige", hvilket vel skal være "lovlig".

Men ikke desto mindre virker det ikke.
Form starten ser således ud:
<form action="..." method="POST" Name="ff"  onsubmit="return validate(document.ff);">

Fejlen, den kommer med er at der fejl i sidstnævnte linie.
Avatar billede olebole Juniormester
03. maj 2000 - 18:00 #3
<ole>
Prøv dette. Det virker:

<html>
<head>
<script language="javascript">
<!--

function validate(f) {
var lovlige = "0123456789";
for (i=0; i<f.talfelt.value.length; i++){
    if (lovlige.indexOf(f.talfelt.value.charAt(i)) < 0) {
        alert("Navnet kan kun best\345 af tal");
        f.talfelt.focus();               
        return false;
    }else{
        f.submit();
    }
}
}

//-->
</script>
</head>

<body>
<form name=ff>
<input type=text name=talfelt>
<input type=button onclick="validate(document.ff)">
</form>

</body>
</html>

/Vh
</bole>
Avatar billede erikjacobsen Ekspert
03. maj 2000 - 19:07 #4
Den altid årvågne JavaScript-ørn har jo ret. Jeg havde vist bare glemt at
skrive "value" et par steder - og et par andre ting. Det her virker nemlig også, Ole. ;-)

Jeg synes det er en fordel, eksplicit at nævne de lovlige tegn, for så
er det nemt at udvide med andre lovlige tegn,

<html>
<head>
<script language="javascript">
<!--
function validate(f) {
  var lovlig = "0123456789";
  for (i=0; i<f.pris.value.length; i++){
    if (lovlig.indexOf(f.pris.value.charAt(i)) < 0) {
      alert("Må kun bestå af cifre");
      f.pris.focus();               
      return false;
    }
  }
  return true;
}
//-->
</script>
</head>
<body>
<form name=ff ONSUBMIT="return validate(document.ff)">
<input type=text name=pris>
<input type=submit>
</form>
</body>
</html>
Avatar billede olebole Juniormester
03. maj 2000 - 19:16 #5
Den altid årvågne JavaScript-ørn erklærer sig heri - ganske enig! ;-))
Avatar billede shylle Nybegynder
03. maj 2000 - 21:48 #6
Det virker stadig ikke. Kan det være fordi jeg har flere functions, der skal køres? Hvordan skal det skrives i ONSUBMIT="return validate(document.ff)"-sætningen, hvis nu denne function: onClick="return CheckOgIndryk()" også skal med?
Avatar billede erikjacobsen Ekspert
03. maj 2000 - 21:54 #7
Det kan det da sagtens være.

Prøv at vis os noget mere, så vil enten ørnen Ole, eller undertegnede, kigge på det!
Avatar billede shylle Nybegynder
03. maj 2000 - 22:01 #8
OK, I får hele alt det relevante. Jeg laver en del valideringer af andre felter, og de virker fint. Jeg har smidt hele javaScriptet med samt <form>-tag'en, <pris input felt>-tag'en og <submit>-tag'en

<script language="JavaScript">
<!-- Hide me from these old browsers . . .
// Tekstens maksimale længde
maxantal = 250
function Check() { 
  formen = document.forms[0]
  // Check om antal tegn i annoncefeltet overskrider grænsen
  antal = formen.Tekst.value.length
  if (antal > maxantal) {
    alert( 'Annonceteksten er på ' + antal +
          ' tegn. Den maksimalt tilladte længde er '
          + maxantal + ' tegn!' )
    return false
  }   
   
    // Check for at overskrift ikke er tomt

  if (formen.Overskrift.value == "") {
    alert('Der skal skrives en overskrift!')
    return false
  } 
 
  // Check for at Headliner ikke er tomt

  if (formen.Headliner.value == "") {
    alert('Der skal skrives et navn for Kunstner, Band, Foredragsholder eller lignende!')
    return false
  } 
 
  // Check for at Kontaktperson ikke er tomt

  if (formen.Kontakt.value == "") {
    alert('Der skal skrives en e-mailadresse for Kontaktpersonen!')
    return false
  } 
 
    // Check for at Tekst ikke er tomt

  if (formen.Tekst.value == "") {
    alert('Der skal skrives en Tekst!')
    return false
  }
  // Check for at Geografi ikke er tomt

  if (formen.Geografi.value == "") {
    alert('Der skal vælges mindst en landsdel!')
    return false
  } 
    // Check for at Pris er mellem 1-99

 
// Check for at Kategori er valgt

  if (formen.Kategori.value == "") {
    alert('Husk at vælge en Kategori!')
    return false
  } 
 
  // Check for at Kontakt er med @
 
  if (formen.Kontakt.value.indexOf("@") != -1) {
    formen.submit()
}
else
{
    alert('Kontaktpersonens e-mailadresse er ikke korrekt')
    return false
  }
 
function validate(f) {
  var lovlig = "0123456789";
  for (i=0; i<f.pris.value.length; i++){
    if (lovlig.indexOf(f.pris.value.charAt(i)) < 0) {
      alert("Må kun bestå af cifre");
      f.pris.focus();               
      return false;
    }
  }
  return true;
}



  formen.submit()
  return true
}

function opdaterantaltegntilbage() {
  document.forms[0].antaltegntilbage.value = maxantal - document.forms[0].Tekst.value.length
}
function CheckOgIndryk() {
  Indryk = Check()
  if( Indryk ) {
    document.forms[0].submit()
    return true
  }
  return false
}
// end hiding! -->
</script>

<form action="_add_annonce.asp?gratis=1" method="POST" name="ff" ONSUBMIT="return validate(document.ff)">

<input type="Text" name="pris" size="2" maxlength="2">

<input type="Submit" value="Send" onClick="return CheckOgIndryk()">
Avatar billede erikjacobsen Ekspert
03. maj 2000 - 22:20 #9
Som udgangspunkt bør du have eeeeeen valideringsfunktion. Der checker du alt.
Hver check siger "alert" et eller andet + "return false" hvis der er noget galt. Den
bør også lave et focus() til det felt der er fejl i. Hvis ingen af dine checks giver fejl,
står der en "return true" nederst i funktionen. Den bliver så udført når alt er gået godt.
Og brug så "onsubmit" - eller hvad Ole Ørn?

Nej - problemet med Oles løsning er, at hvis en bruger har slået JavaScript fra, vil
der ikke blive submittet noget. Det vil der med min løsning - omend det så ikke
bliver checket.

function validate(f) {
  var lovlig = "0123456789";
  for (i=0; i<f.pris.value.length; i++){
    if (lovlig.indexOf(f.pris.value.charAt(i)) < 0) {
    alert("Må kun bestå af cifre");
    f.pris.focus();               
    return false;
    }
  }

  if (f.Kategori.value == "") {
    alert('Husk at vælge en Kategori!')
    return false
  }
 
  return true;
}
Avatar billede shylle Nybegynder
03. maj 2000 - 23:27 #10
Ja, det har du jo alt sammen ret i, men jeg fatter bare ikke, hvordan for, hvis den funktion, du har skrevet, skal være der og den anden (CheckOgIndryk)også skal være der, så bliver der vel to som skal køres ved submit.

Jeg ville meget gerne integrere function validate(f) scriptet i alt det andet. Kan det ikke lade sig gøre?
Avatar billede shylle Nybegynder
03. maj 2000 - 23:46 #11
Jeg brugte scriptet fra http://www.eksperten.dk/spm.asp?id=1395

Men tak for hjælpen, anyways.

Du får selvfølgelig pointene, Erik
Avatar billede erikjacobsen Ekspert
04. maj 2000 - 07:27 #12
Ok. Men jeg forstår ikke helt hvad du mener i din kommentar fra
03-05-00 23:27:02.
Avatar billede olebole Juniormester
04. maj 2000 - 10:11 #13
<ole>
Problemet er vist, at I taler forbi hinanden!

Erik's løsning virker, når man har slået JavaScripting fra (...og det er SATANS ærgeligt, man kan det...men det kan man altså!). Den gør det - ved at man lægger kaldet på 'onsubmit' - at den submitter formen og DEREFTER checker, om alt var rigtigt udfyldt...altså (undskyld, Erik) en fuldstændig overflødig funktionalitet.
Her behøver du ikke funktionen 'CheckOgIndryk()'. Der submittes direkte ved tryk på knappen - IKKE via JavaScript.

Min løsning kræver, at JavaScripting er slået til, men checker til gengæld formen INDEN den submittes.

Normalt er jeg 'fundamentalist', når det gælder, hvem der skal kunne have glæde af en side. ALLE skal kunne se den, plejer at være min ufravigelige holdning.
MIN grænse ligger dog ved JavaScript, der efterhånden er så integreret i WWW, at  det på mig virker tåbeligt at slå det fra. Hvis folk alligevel gør det, må det være deres eget ansvar, at de afskærer sig selv fra at se laaaaangt de fleste sider på WWW.

Man KUNNE godt lave en løsning, der tilgodeser alle, meeeen...der MÅ være grænser ;-)

/Vh
</Ørn>...Hehe
Avatar billede erikjacobsen Ekspert
04. maj 2000 - 10:29 #14
Du glemmer vist, Ole Ørn, at Microsoft rent faktisk har anbefalet brugerne af visse af
deres nyere browsere, at slå JavaScript fra, undtagen til steder de har tillid til.

Der var nemlig noget med at deres fabelagtige programmører havde fået lavet et hul, så
man fra en hjemmeside kunne hente en fil, blot
man kendte navnet.

Det er der nok ingen almindelig mennesker, der gør, men jeg tror nok, at enkelte større
virksomheder, som vil have styr på sikkerheden, gør det for deres ansatte.

Og selv den fejl så - vistnok - er rettet i deres nyeste browser, så kan der sagtens opstå et
nyt tilsvarende problem hos dem, eller hos andre browserfabrikanter.

En rigtig professionel side tager højde for dette, og tillader navigering, hvis JavaScript
er slået fra, men en navigering som måske ikke er så smart.
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