05. november 2008 - 11:15Der er
7 kommentarer og 1 løsning
Form validering: kun tal og kommatal
Hej alle,
jeg har et spørgsmål vedrørende en form validering. Kort fortalt, så har jeg en form med nogle forskellige input tekst-felter.
Et af disse felter er et procent felt, hvor brugeren kan skrive fra 0 til 100, men også kan bruge kommatal, dvs. at de kan skrive 12,5 også.
Men det går ikke hvis de skriver over 100 eller bogstaver. Jeg har prøvet en JavaScript validator, men synes ikke at kunne få den til at virke... Den ser sådan her ud:
<script type='text/javascript'>
function ValidateForm(FormNavn) {
if(IsEmpty(FormNavn.procent)) { alert('You have not entered an account number') FormNavn.procent.focus(); return false; }
if (!IsNumeric(FormNavn.procent.value)) { alert('Please enter only numbers or decimal points in the account field') FormNavn.procent.focus(); return false; }
return true;
} </script>
Navnet på formen er "FormNavn" og navnet på mit input tekst-felt er "procent". Ind til videre har jeg bare forsøgt at tjekke for, om der er andet end tal der bliver skrevet ind i input feltet.
Nede i min form på HTML siden har jeg så tilføjet dette på mit form tag:
onsubmit="java script:return ValidateForm(this)">
Jeg er ikke helt sikker på at jeg for det første gør det rigtigt og for det andet, bruger den bedste metode til at gøre det.
Hvis der er en anden som har en god valideringsmetode eller script, så hører jeg med interesse.
Manuelle og semi-automatiske strategier for identitetsstyring virker - lige indtil nogen beder om dokumentation. For at undgå denne fare har DKTV taget kontrol over sin identitets- og adgangsstrategi.
Parameter-navnet er misvisende, da du jo overfører selve formen, men ellers bruger du jo variablen rigtigt ...
Hvad er IsEmpty og IsNumeric ?-)
-- men f.eks.
<script type='text/javascript'>
function ValidateForm(FormNavn){ if(!FormNavn.procent.value.match(/^(100|[1-9]?\d(,\d)?)$/)){ alert('Please enter only numbers or decimal points in the account field') FormNavn.procent.focus(); return false; } return true; } </script>
-- og så bør kaldet se således ud:
<form ... onsubmit="return ValidateForm(this)">
-- da det er overflødigt at fortælle javascript-fortolkeren, at den skal behandle script i en script-event som script !-)
fantastisk - nu virker det bare præcis som det skal. Tusind tak for din hjælp...
Den metode jeg skrev overstående var hentet fra en hjemmeside, så tænkte nok at der var en masse som ikke nødvendigvis var brug for. Men nu spiller det bare.
Hvis du vil smide et svar, så får du - meget velfortjent - pointene.
Hvis jeg har et par stykker andre input felter hvor der også kun må bruges tal, men også over 100, kan jeg så skrive det:
<script type='text/javascript'>
function ValidateForm(addActivity){ if(!addActivity.procent.value.match(/^(100|[1-9]?\d(,\d)?)$/)){ alert('Skriv kun tal og decimal tal i dette felt og mellem 0 og 100') addActivity.procent.focus(); return false; } if(!addActivity.enheder.value.match(/^([1-9]?\d(,\d)?)$/)){ alert('Skriv kun tal og decimal tal i dette felt og mellem 0 og 100') addActivity.enheder.focus(); return false; } if(!addActivity.int1.value.match(/^([1-9]?\d(,\d)?)$/)){ alert('Skriv kun tal og decimal tal i dette felt og mellem 0 og 100') addActivity.int1.focus(); return false; } if(!addActivity.int2.value.match(/^([1-9]?\d(,\d)?)$/)){ alert('Skriv kun tal og decimal tal i dette felt og mellem 0 og 100') addActivity.int2.focus(); return false; } return true;
} </script>
Jeg har i de tre andre slettet 100| men ved ikke helt om jeg "kan" det for at det skal virke...
if(!addActivity.enheder.value.match(/^[1-9]?\d+(,\d?)$/)){//+ betyder en eller flere, så det er uendeligt !-) alert('Skriv kun tal og decimal tal i dette felt og gerne over 100') addActivity.enheder.focus(); return false; }
Eller:
if(!addActivity.enheder.value.match(/^[1-9]?\d{1,2}(,\d?)$/)){//{1,2} betyder en eller 2, så det er op til 999 !-) alert('Skriv kun tal og decimal tal i dette felt og gerne over 100') addActivity.enheder.focus(); return false; }
Jeg har prøvet dit nye forslag, men synes ikke at jeg kan få det til at virke...
Den hedder i mit java script:
<script type='text/javascript'>
function ValidateForm(addActivity){ if(!addActivity.procent.value.match(/^(100|[1-9]?\d(,\d)?)$/)){ alert('Skriv kun tal og decimal tal i dette felt og mellem 0 og 100') addActivity.procent.focus(); return false; }
if(!addActivity.enheder.value.match(/^[1-9]?\d{1,2}(,\d)?$/)){//{1,2} alert('Skriv kun tal og decimal tal i dette felt og gerne over 100') addActivity.enheder.focus(); return false; }
if(!addActivity.int1.value.match(/^[1-9]?\d{1,2}(,\d)?$/)){//{1,2} alert('Skriv kun tal og decimal tal i dette felt og gerne over 100') addActivity.int1.focus(); return false; }
if(!addActivity.int2.value.match(/^[1-9]?\d{1,2}(,\d)?$/)){//{1,2} alert('Skriv kun tal og decimal tal i dette felt og gerne over 100') addActivity.int2.focus(); return false; }
return true;
} </script>
Jeg har brugt dit sidste forslag, hvor det er op til 999, tror ikke de får brug for mere end det...
Men det virker ikke, jeg får bare en sædvanlig fejlmeddelse at jeg forsøger at indsætte en string i et int felt...
det virker eller dvs. det virker det meste af tiden.
På min side har jeg en drop-down liste med en masse forskellige typer aktiviteter. Når man så trykker på en aktivitet dukker den op med en form, der består af forskellige input-felter, dog med det tilfælles, at de fleste af dem har et input-felt ved navn "enheder". Og i alle på nær 2 aktiviteter (af hvad jeg indtil videre har testet mig frem til) virker valideringen ikke. Jeg har ingen fornuftig forklaring og har ingen idé om hvorfor det ikke virker der.
Men under alle omstændigheder, så virker det på de fleste andre aktiviteter. Det er et intranet system, så har desværre ikke mulighed for at lave et link.
Synes godt om
Ny brugerNybegynder
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.