Jens Gyldenkærne Clausen skrev:
> function validerFelt(field){
> if (isNaN(field.value)){
> alert('Indtast en numerisk værdi');
> return false;
> }
> if (parseInt(field.value) < 0) {
> alert('Kun positive heltal er tilladt');
> this.focus();
Skal det ikke være field.focus(); Det løser dog ikke problemet.
> return false;
> }
> findAlle();
> return true;
> }
>
> onchange="validerFelt(this)"
>
> - og den virker sådan set o.k. Men jeg ville gerne sætte fokus på
> det felt der fejler, så det er nemt at rette fejlen. Det kan jeg
> ikke få til at virke. Når jeg tabber igennem formen, bliver
> markøren stående i feltet neden under det der fejler.
Jeg tror du skal se på hvad der sker når du trykker på tab og i hvilken
rækkefølge det sker.
Det lader til at onChange afvikles inden feltet mister fokus. Derfor
nytter det ikke noget at sætte fokus, for umiddelbart efter flyttes
fokus til næste felt (hvilket du allerede har bedt om med dit tab).
"[onChange] is executed before the code specified by onblur when the
control is also losing the focus."
<URL:
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/dhtml_reference_entry.asp?frame=true>
Det kan dog lade sig gøre hvis du sætter lidt forsinkelse på fokuseringen:
setTimeout(field.focus, 100); // 100 millisekunder
> NB: parseInt godtager egentlig lidt for meget - da fx. 3.4 også
> valideres. Hvad skal jeg skrive hvis det kun skal være positive
> heltal der accepteres?
Så er vi nok ude i regular expressions:
/^\d+$/.test(field.value)
Ovenstående vil være sandt netop hvis feltet indeholder ét eller flere
cifre. Hvis den også skal være sandt hvis feltet er tomt (f.eks. hvis
man sletter en allerede indtastet værdi) så skal '+' skiftes ud med '*'
/Torben