Avatar billede eflow Nybegynder
12. februar 2005 - 21:45 Der er 8 kommentarer og
1 løsning

Validation af timeseddel

Hej,

Jeg skal have valideret nogle felter i en form. Jeg har en form med flg. felter:

fee
hour[] (dem har jeg 31 af)
total_hour
total_fee

Selve formen hedder timesheet.

Jeg vil have den til at når man har intastet et tal i fee, og man derefter begynder at tage tal ind i hour[] felterne, så skal den først udregne det totale antal timer i total_hour, og derefter det totale fee i total_fee (fee*total_hour).

Mit første problem ligger i at, jeg ikke ved hvordan jeg løber alle de hour felter igennem, desuden har jeg ikke rodet skide meget med javascript, eller ihvertfald ikke lige det her.
Jeg kan forestille mig at nogle af jer hajer derude, hurtigt kan strikke en funktion sammen, der lige fikser det :)

Hvis der er spørgsmål, skal i være velkomne til at spørge :) og hvis i ikke mener 60 point er nok, sætter jeg gerne antallet længere op :)
Avatar billede olebole Juniormester
12. februar 2005 - 22:28 #1
<ole>

- og hvad skal der ske, hvis brugeren vælger at udfylde 'fee' til sidst?  :)

/mvh
</bole>
Avatar billede eflow Nybegynder
12. februar 2005 - 22:58 #2
Så skal den stadig regne det hele ud...

Jeg forestiller mig en funktion der klarer det hele, hvis det kan lade sig gøre, den bliver så kaldt på en onchange af enten fee eller hour[] felterne...

Derfor skal der også være en validation af om der er skrevet noget i fee feltet, og om det overhovedet er tal der er skrevet ...
Avatar billede olebole Juniormester
12. februar 2005 - 23:23 #3
Jamen, hvis der ikke står noget i fee, vil det jo udløse en fejl.
Står der 0, vil resultatet blive 0 - og der bliver foretaget en masse udregninger uden grund.

Jeg prøver igen: Hvad skal der ske, hvis brugeren udfylder fee til sidst?
Avatar billede eflow Nybegynder
12. februar 2005 - 23:35 #4
Så skal den regne total_fee ud når fee er indtastet...Det er egentligt ret enkelt...
Avatar billede eflow Nybegynder
12. februar 2005 - 23:59 #5
For at skære det ud i pap, skal den altså først tjekke om fee er indtast og total_hour er udregnet, før den skal udregne total_fee...
Og når den udregner total_hour skal den så kun udregne hvis der er indtastet tal i mindst 1 af hour[] felterne ...
Avatar billede olebole Juniormester
13. februar 2005 - 00:39 #6
nøhh ... hvis man selv har tænkt tankerne - får dem forklaret af den, der har tænkt dem - eller er clairvoyant, er det såmænd ret enkelt  ;o)

<script type="text/JavaScript">
function calc(f) {
    var tot, elms, val = parseInt(f.fee.value);
    if (val=="" || !(val-1<val)) {
        f.total_fee.value = 0;
        return;
    }
    tot = 0;
    elms = f.elements["hour[]"];
    for (i=0,j=elms.length; i<j; i++) {
        val = parseInt(elms[i].value);
        if (val!="" && val-1<val) tot += val;
    }
    f.total_hour.value = tot;
    f.total_fee.value = tot * parseInt(f.fee.value);
}
</script>

<form>
Fee: <input type="text" name="fee" onblur="calc(this.form)"><br>
Hour: <input type="text" name="hour[]" onblur="calc(this.form)"><br>
Hour: <input type="text" name="hour[]" onblur="calc(this.form)"><br>
Hour: <input type="text" name="hour[]" onblur="calc(this.form)"><br>
<hr>
Total Hours: <input type="text" name="total_hour" onblur="calc(this.form)"><br>
Total Fee: <input type="text" name="total_fee" onblur="calc(this.form)"><br>
</form>
Avatar billede Slettet bruger
14. februar 2005 - 09:56 #7
"eller er clairvoyant" :D
Avatar billede eflow Nybegynder
14. februar 2005 - 13:07 #8
Jamen så er det jo godt du vidst er lidt clairvoyant og en javascript haj på samme tid :)

Takker mange gange for besvarelsen, det virker perfekt ... :)
Avatar billede olebole Juniormester
14. februar 2005 - 13:20 #9
Selvtak  ;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

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