Avatar billede melted Nybegynder
14. maj 2003 - 11:14 Der er 21 kommentarer og
1 løsning

Script til tids-felt

Jeg har brug for at script til nogle 5 tegns textfelter, hvor man skal kunne skrive tidspunkter i (altså f.eks. "11:45").

Til det skal jeg bruge et script med følgende:

1) Tjek at de 2 første tegn er tal indenfor 00 til 23
2) Tjek at de 2 sidste tegn er tal indenfor 00 til 59
3) Det 3. tegn skal altid være et ":"

Jeg har på et tidspunkt set noget lignende hvor ":"-tegnet stod fast fra start og så skrev man bare talene ind og så røg de sidste 2 tegn bare bagefter ":"-tegnet. Jeg har selvfølgelig glemt hvor jeg så det henne, men det er sådan noget jeg skal bruge.

Håber nogen kan hjælpe :)
Avatar billede ohmish Nybegynder
14. maj 2003 - 12:47 #1
mener du et "realtime" display?
Avatar billede melted Nybegynder
14. maj 2003 - 13:22 #2
jeps.

Helst sådan at hvis man indtaster tal udenfor de ovenstående, så skal der komme en alert-dialog om at man ikke må indtaste det.
Avatar billede ohmish Nybegynder
14. maj 2003 - 13:57 #3
<script language="JavaScript">
function valider(f) {
if (f.TAL.value>23)
alert("Ugyldigt format"); f.TAL.focus(); return false; }
if (f.TAL2.value>59)
alert("Ugyldigt format"); f.TAL2.focus(); return false; }
}
</script>

Så skal din form se sådan her ud:
<form action="enellerandenside" method="POST" onsubmit="return valider(this)">
Avatar billede ohmish Nybegynder
14. maj 2003 - 13:58 #4
TAL og TAL2 er navnet på dine felter. ret evt.
Avatar billede melted Nybegynder
14. maj 2003 - 14:09 #5
Der mangler det med ":"-tegnet og din løsning kræver vel også at man har et felt hvor man indtaster time og et andet hvor man indtaster minutterne, men det skal være sådan at det hele bliver indtastet i ét felt.
Avatar billede knudx Nybegynder
14. maj 2003 - 14:10 #6
interessant problem... Hvad med det her
<script type="text/javascript">
function check (i, e) {
    if(e.keyCode==8||e.keyCode==46) return;
    if(i.value.length==2){
        if(!isNumber(i.value,24)) i.value = "";
        else with(i.nextSibling.nextSibling) {
            value = "";
            focus();
        }
    }
}
function isNumber (s, max) {
    if (!s.match(/\d\d/)) return false;
    if (parseInt(s)>max) return false;
    return true;
}
</script>
<span style="border:1px solid red;">
<input type="text" name="textfield" size="2" maxlength="2" value="" onfocus="this.value=''" style="text-align:right;border:none;" onKeyDown="check(this,event)">&nbsp;:&nbsp;
<input type="text" name="textfield" size="2" maxlength="2" value="" onchange="if (!isNumber(this.value,59)) this.value=''" style="text-align:left;border:none;">
</span>
---
bemærk et kolonet ikke er i et 'input', men tekst imellem to input's
prøv engang
J
Avatar billede ohmish Nybegynder
14. maj 2003 - 14:11 #7
ah ok. men det er noget php kan klare med et bjæf. har du det?
Avatar billede melted Nybegynder
14. maj 2003 - 14:16 #8
Nope... jeg bruger ASP og jeg har også set det lavet med javascript, men kan ikke huske hvor
Avatar billede Slettet bruger
14. maj 2003 - 15:30 #9
Denne kode validerer datoen:

<html>
<head>
<script>
function valider(frm) {
  val = frm.tid.value;
  if (!val.match(/^\d{2}:\d{2}$/) || parseInt(val.split(":")[0], 10) > 23 || parseInt(val.split(":")[1], 10) > 59) {
    alert("Datoformatet er forkert!");
    return false;
  }
  return true;
}
</script>
</head>
<body>
<form onSubmit="return valider(this);">
<input type="text" name="tid"> <input type="submit" value="ok">
</form>
</body>
</html>
Avatar billede melted Nybegynder
15. maj 2003 - 14:18 #10
phoenixv > Hvordan skal det se ud når der er en masse forskellige textfelter? Den løsning du har lavet er vel kun til ét textfelt??
Avatar billede melted Nybegynder
15. maj 2003 - 14:20 #11
phoenixv > Det skal også være sådan at dialogboxen popper op når man har indtastet noget forkert i textfeltet og ikke når man submitter... altså noget OnChange...
Avatar billede Slettet bruger
18. maj 2003 - 10:48 #12
Du må lige forklare antallet af tekstfelterne og opbygningen af siden så.

Derudover kan du jo ikke tjekke, mens man indtaster. Når jeg fx begynder at indtaste en dato, skriver jeg jo først et tal. Dette ene tal i sig selv er måske ikke en korrekt formateret dato, men det vil det blive, når jeg får skrevet resten af tallene og kolonnet.
I det hele taget er det en dårlig idé at validere noget som helst, mens brugeren indtaster. Hvis man lige kommer til at lave en slåfejl, vil man hellere lige selv rette den end at få smidt en alert i hovedet, der forklarer én, hvor åndssvag man er at indtaste noget forkert. :)
Avatar billede melted Nybegynder
18. maj 2003 - 11:24 #13
Nej nej det behøver ikke være mens man taster, men jeg tænkte på en OnChange-funktion hvor man får en alert når man man er færdig med feltet - altså går videre til næste felt. Den reagerer jo først efter man har indtastet.

De textfelter der er, er udfor en række datoer hvor man skal indtaste et "fra"-tidspunkt og et "til"-tidspunkt.
Avatar billede Slettet bruger
18. maj 2003 - 11:36 #14
Så mener du ikke onChange, men onBlur.
Alligevel er det højst u-brugervenligt, da der bør stå en bruger frit for, hvornår han vil rette en evt. fejlagtig indtastning. Hvis han lige vil videre til et andet felt, før han retter en anden fejl, bør han have lov til det. Men det er du måske ikke enig i?

Og mht. tekstfelterne, så skal jeg have detaljerede oplysninger om sidens opbygning. Der findes ingen magisk formular, der siger "tjek alle tekstfelter, der ser ud til at indeholde en dato". Desværre! :)
Avatar billede melted Nybegynder
18. maj 2003 - 14:53 #15
Jeg bruger OnChange i nogle andre textfelter og der virker det som jeg vil have det...

Det er lidt svært at skrive detaljeret hvordan det er opbygget for det er efterhånden ret kompliceret, men i princippet drejer det sig bare om at en funktion skal kigge textfeltet igennem når man OnChange'er (eller OnBlur'er)

Simpelt ser det sådan ud:

1) Start af løkke med f.eks. 30 dage

2) Textfelter udfor hver dag i løkke:
<input name="dagtidfra<%=startd%>" type="text" class="input" id="dagtidfra<%=startd%>" value="09:00" size="5" maxlength="5" onChange="checkinput(this)"> - <input name="dagtidtil<%=startd%>" type="text" class="input" id="dagtidtil<%=startd%>" value="12:00" size="5" maxlength="5" onChange="checkinput(this)">

3) Slut løkke

Håber du kan nogle tricks :)
Avatar billede Slettet bruger
18. maj 2003 - 16:09 #16
Du kan godt lave en funktion, der hedder checkinput, hvis du vil det, men du skal bare vide, at det skræmmer brugere væk.

function checkinput(felt) {
  val = felt.value;
  if (!val.match(/^\d{2}:\d{2}$/) || parseInt(val.split(":")[0], 10) > 23 || parseInt(val.split(":")[1], 10) > 59) {
    alert("Datoformatet er forkert!");
    felt.focus();
  }
}
Avatar billede melted Nybegynder
18. maj 2003 - 17:50 #17
Hvorfor skræmmer det brugerne væk? Ellers så skal de jo bagefter at de har siddet og indtastet en helvedes masse forkerte data ind, sidde og indtaste dem ind igen efter de har fået fejlmeddelelsen. Og så ville fejlmeddelelsen også skulle indeholde en lang liste over alle de felter der er indtastet forkert... så er det da federe hvis de allerede ved første felt finder ud af hvordan de skal skrive rigtigt... synes jeg.

Jeg vil lige prøve at kigge på det senere...
Avatar billede melted Nybegynder
18. maj 2003 - 17:57 #18
Det virker! Mange tak :)
Hvorfor kan jeg ikke give dig point?
Avatar billede Slettet bruger
19. maj 2003 - 14:13 #19
Jeg skal først lige svare. :)

De skal jo ikke indtaste dataene igen. Fejlmeddelelsen leveres, før formularen bliver sendt videre, og derfor skal de bare lige rette eventuelle slåfejl eller forglemmelser. Det giver generelt langt færre advarsler, hvilket er at foretrække, eftersom disse kan virke temmelig intimiderende på nybegyndere.
Avatar billede melted Nybegynder
19. maj 2003 - 14:57 #20
Ja - "liiige rette eventuelle fejl" kan betyde at de skal rette måske 100 textfelter hvis de alle er udfyldt forkert... nå, men det virker ihvertfald og det er jo det vigtigste :)

Tak for hjælpen.
Avatar billede Slettet bruger
19. maj 2003 - 15:46 #21
Det skal de jo alligevel - om man bruger den ene metode eller den anden. Forskellen ligger bare i antallet af advarselsbokse. :)
Avatar billede Slettet bruger
19. maj 2003 - 15:47 #22
I det hele taget bør det ikke være så svært at udfylde et felt, at man laver 100 fejl. Angiv tydeligt formatet på siden, evt. med et eksempel. Så er advarslerne forbeholdt dem, der bare ikke vil udfylde ordentligt.
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