Avatar billede eksperten1 Nybegynder
18. september 2002 - 21:46 Der er 10 kommentarer og
1 løsning

realtime validering

Jeg så engang en side hvor at når man begyndte at indtaste, her en dato, i et formfelt, så ville scriptet formattere feltet korrekt for en.

Eks.
Jeg taster 21 (scriptet taster -) jeg taster 12 (scriptet taster -) jeg taster 2002

Det er ikke muligt at indtaste bogstaver, kun tal.

Eksempler, hints, anyone ?

vhE1
Avatar billede tknudsen Nybegynder
19. september 2002 - 09:52 #1
Der er flere opgaver i den funktionalitet:
1) Validering af indtastede værdier - skal være integer
2) Formatering af tekst
...

1) En simpel integer-validering er isNaN() metoden, som returnerer true, hvis input er andet end et nummer. OM den aksepterer decimal tal kan jeg ikke lige huske. En anden medtode er parseInt(), som returnere den (første) del af en streng, som den kan "oversætte" til et helt tal. Dvs at parseInt(1f22) returnerer heltallet 1, og parseInt(12.25) returnerer 12.

Dette er dog ikke nok til at validere hele dato-strengen da denne også indeholder '-'. Så en samlet validering kunne være noget i stil med:

var tmpValue = value.replace(/-/,''); // fjerner alle '-' fra dato-streng
isNaN(tmpValue);

2) Formateringen kan (simpelt) laves på følgende måde:

if(value.lenght==2 || value.lenght==5)
  value+= '-';


Samlet bliver det til noget ala:

function strToDate(obj)
{
  var tmpValue = obj.value.replace(/-/,'');
  if(isNaN(tmpValue))
  {
    alert('forkert format');
    return;
  }

  if(obj.value.lenght==2 || obj.value.lenght==5)
    obj.value += '-';
}


<input type="text" onKeyUp="strToDate(this)">
Avatar billede tknudsen Nybegynder
19. september 2002 - 09:56 #2
der er lige et par små-fejl... her er den samlede (fejlfrie?) kode:

function strToDate(obj)
{
  var tmpValue = obj.value.replace(/-/g,'');

  if(isNaN(tmpValue))
  {
    alert('forkert format');
    return;
  }
  if(obj.value.length==2 || obj.value.length==5)
    obj.value = obj.value+'-';
}
Avatar billede tknudsen Nybegynder
19. september 2002 - 09:57 #3
Der er ingen kontrol på om datoen, ud over formatet, er gyldig.
Avatar billede tknudsen Nybegynder
19. september 2002 - 10:01 #4
Det kunne du lave via noget i stil med:

function validateDate(obj)
{
  var dateElements = obj.value.split('-');

  if(parseInt(dateElements[0],10)<=0 || parseInt(dateElements[0],10)>[dage_i_månede])
  {
    alert('ugyldig dag');
    return false;
  }
  ...

  return true;
}

<input type="text" onBlur="validateDate(this)">
Avatar billede eksperten1 Nybegynder
19. september 2002 - 10:39 #5
Det er simpelthen for cool, men jeg kan ikke rigtig få den sidste funktion til at fungere.
Har Javascript virkelig ikke en funktion som VB ala isDate(date) ?

Mange tak for hjælpen, jeg håber at du kan give mig det allersidste skub sådan at den validerer datoen.

vhE1
Avatar billede tknudsen Nybegynder
19. september 2002 - 10:43 #6
Ikke hvad jeg ved af... men jeg har heller ikke kigget efter den for nyligt :-)

Hvad er det du ikke kan få til at virke ?
Avatar billede eksperten1 Nybegynder
19. september 2002 - 10:49 #7
Tja, den gør ikke rigtig noget, umiddelbart finder jeg også denne her del underlig
if(parseInt(dateElements[0],10)<=0 || parseInt(dateElements[0],10)>[dage_i_månede])
Det er den sidste del, dage_i_månede som ser sjov ud ?
Avatar billede tknudsen Nybegynder
19. september 2002 - 10:52 #8
ja - det er meningen at du selv skal sætte antal dage ind. Lav evt et array med antal dage i hver månede og bruge dateElements[1] (måned) til at indeksere det array.

var MONTH = new array();
MONTH[0] = 31;
MONTH[1] = 28;
MONTH[2] = 29;

osv

parseInt(dateElements[0],10)>MONTH[parseInt(dateElements[1],10)])
Avatar billede eksperten1 Nybegynder
19. september 2002 - 10:58 #9
Aha, forstået. Men i virkeligheden giver scriptet jo ikke svar på om den indtastede dato nu også er korrekt, der er 29 dage i februar i et skudår, men normalt kun 28 dage.

No matter what, så er det en fed funktion med at indsætte - i feltet.
Du skal have mange tak, og point.

vhE1
Avatar billede tknudsen Nybegynder
19. september 2002 - 11:02 #10
Du har ret mht skudår, men der kan du jo finde ud af om det er skudår, og så ligge 1 til MONTH[1].
Avatar billede eksperten1 Nybegynder
19. september 2002 - 11:06 #11
Det er faktisk ret fedt det her javascript, jeg har primært kodet serverside i ASP, men det rækker altså ikke længere.

Kan du henvise til nogle gode bøger/artikler som sætter en ordentligt igang, jeg ved at en hel del af det ligger i bedre disciplin m.h.t. at skrive js, men hvad findes der af gode referencer hvor man kan slå indbyggede funktioner op o.l. ?

Tak for hjælpen

vhE1
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