Avatar billede hcthorsen Praktikant
20. februar 2009 - 12:52 Der er 13 kommentarer og
1 løsning

Indtastning af tidspunkt i formular og validering

Jeg laver en omfattende formular (på papir 37 A4-sider) med over 1000 felter. I sagens natur skal det køre så glat som muligt når man skal indtaste data, for ellers bliver man aldrig færdig.  Man skal blandt andet indtaste en masse tidspunkter (HH:MM). Her ville det jo være fedt hvis man havde to felter, hvor man automatisk sprang videre fra HH til MM når man havde indtastet 2 tal. Jeg er forholdsvis grøn m.h.t. PHP og HTML, og helt jomfruelig hvad angår JS. Jeg går ud fra at jeg skal ud i noget java. Er der nogen der kan hjælpe?
Avatar billede olebole Juniormester
20. februar 2009 - 14:08 #1
<ole>

"Jeg laver en omfattende formular (på papir 37 A4-sider) med over 1000 felter." >> Det lyder som skoleeksemplet på en designfejl  =)

Man kan godt lave noget med JavaScript (ikke Java, som er noget helt andet, men det kræver, man kan se lidt af formularen

/mvh
</bole>
Avatar billede hcthorsen Praktikant
20. februar 2009 - 14:48 #2
Jeg ved ikke hvorfor der er skoleeksemplet på en designfejl. Jeg er ikke i tvivl om at det kan gøres nemmere end jeg gør det, men nu tjener jeg ikke mine penge ved at lave det her - og det er nok godt nok:-) Sagen er den at data i første omgang bliver skrevet ind på papir, og efterfølgende skal tastes ind via nettet. Det er et ønske at formularen på nettet ligner papirudgaven, så jeg gemmer mine word-dokumenter i html-format. Jeg ved godt det er FY og får en rigtig programmør til at få cola'en galt i halsen, men det virker. Du får et lille uddrag:

<form name="side7" method="post" action="gem_crf_mysql.php" onSubmit="return validateCompleteForm(this, 'error');">    <b>Klokkeslæt: </b>  <input type="text" name="spg3" id="spg3"
size="1" maxlength="2" align="center" required="1" realname="Klokkeslæt">:<input type="text" name="spg4" id="spg4" size="1" maxlength="2" align="center" required="1" realname="Klokkeslæt">     </span><b>(VIGTIGT!)</b></p>

Som du kan se bruger jeg to input-felter for at få indtastet et klokkeslæt. Det er nok ikke måden at gøre det på, men som du nok har fornemmet, er jeg novice på området...
Avatar billede olebole Juniormester
20. februar 2009 - 15:01 #3
Den dag, du har udfyldt 999 felter, og browseren går ned - eller din kat hiver stikket ud - finder du ud af én af årsagerne til, at der er tale om en designfejl  ;o)

Er ID'erne lavet, så der altid står 'spg' - efterfulgt af et tal - og er der altid én til forskel mellem tallet for timer og minutter?
Avatar billede hcthorsen Praktikant
20. februar 2009 - 15:15 #4
Data bliver gemt i databasen for hver side, så skaden kan aldrig blive så stor. Ja, ID'erne er meget kreativt fundet på:-)
Avatar billede olebole Juniormester
21. februar 2009 - 15:00 #5
<script type="text/javascript">
function goToNext(oInp) {
    if (oInp.value<2) return;
    var aElms = oInp.form.elements,
    nInx = Number(oInp.name.split("spg")[1]),
    sNextName = "spg" + (nInx+=1);
    if (aElms[sNextName]) aElms[sNextName].focus();
}
</script>

<input type="text" onkeyup="goToNext(this)" name="spg3" id="spg3" size="1" maxlength="2" align="center" required="1" realname="Klokkeslæt">:<input type="text" onkeyup="goToNext(this)" name="spg4" id="spg4" size="1" maxlength="2" align="center" required="1" realname="Klokkeslæt">
Avatar billede olebole Juniormester
21. februar 2009 - 15:01 #6
ups  =)

<script type="text/javascript">
function goToNext(oInp) {
    if (oInp.value.length<2) return;
    var aElms = oInp.form.elements,
    nInx = Number(oInp.name.split("spg")[1]),
    sNextName = "spg" + (nInx+=1);
    if (aElms[sNextName]) aElms[sNextName].focus();
}
</script>
Avatar billede hcthorsen Praktikant
23. februar 2009 - 12:15 #7
Det virker ikke hos mig. Jeg får fejlen: "Et objekt var ventet".
Avatar billede olebole Juniormester
23. februar 2009 - 12:27 #8
Så gør du noget forkert - eller også er der noget, du ikke fortæller
Avatar billede hcthorsen Praktikant
23. februar 2009 - 13:45 #9
Ok, nu har jeg prøvet bare at køre din kode, og det virker heller ikke. Der må være et eller andet fundamentalt jeg ikke fatter. I firefox er fejlmeddelelsen "Fejl: oInp.form has no properties" og i IE "Et objekt er obligatorisk".
Avatar billede hcthorsen Praktikant
23. februar 2009 - 15:38 #10
Ok, så virker det. PHP og HTML er til at forstå, men JS er jo helt sort.... Smider du et svar så du kan få point? Du skal have mange tak for hjælpen - du er godt nok aktiv herinde på siden.
Avatar billede olebole Juniormester
23. februar 2009 - 16:11 #11
Selvtak - ja, jeg må nok erkende, at jeg bruger en hel del tid herinde ... og har gjort det i mange år  =)
Avatar billede hcthorsen Praktikant
24. februar 2009 - 08:34 #12
Jeg går ud fra at man nemt kan ændre dit lille script så man også kan hoppe videre når man har tjekket af i en check-box. jeg kan ikke selv greje hvordan.
Avatar billede olebole Juniormester
24. februar 2009 - 09:09 #13
Ja, hvis du kan forklare præcis, hvad der skal ske, hvornår  =)
Avatar billede hcthorsen Praktikant
24. februar 2009 - 09:59 #14
Før skulle man hoppe videre til næste felt når man havde fyldt 2 tal ud i et felt. Nu skal man hoppe videre til næste felt når man har tjekket af i en checkbox. Det skal helst kunne fungere alene med tastaturet, så man skal kunne tjekke text-boxen af med mellemrums-tasten.

<tr>
<td><p>EKG</p></td>
<td><input type="text" onkeyup="goToNext(this)" name="spg3" id="spg3" size="1" maxlength="2" align="center">:
<input type="text" onkeyup="goToNext(this)" name="spg4" id="spg4" size="1" maxlength="2" align="center"></td>
<td><input type="checkbox" name="spg5" id="spg5" align="center"></td>
<td><input type="text" onkeyup="goToNext(this)" name="spg6" id="spg6" size="1" maxlength="2" align="center"></td></tr>

Jeg har prøvet bare at ændre dit script til:

function goToNext(oInp) {
    if (oInp.value.length<1) return;
    var aElms = oInp.form.elements,
    nInx = Number(oInp.name.split("spg")[1]),
    sNextName = "spg" + (nInx+=1);
    if (aElms[sNextName]) aElms[sNextName].focus();
}

Det er kun en delvis succes. Mine id'er kører fotsat derudaf som spg1, spg2, spg3...
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