24. juli 2003 - 14:28Der er
24 kommentarer og 1 løsning
Forskel i dato
Jeg har lige et enkelt script til:
Jeg har to dato-felter i en formular, som skal udfyldes. Kan et javascript tjekke om den ene dato er senere end eller lig den anden og i modsat fald komme med en fejlmeddelelse? Datoerne er begge i formatet dd-mm-yyyy.
Det ser jo rigtig fint ud, men kan du lave et par ændringer (det vil nok gøre det en del kortere), så skal du nok få point: - den behøver ikke tjekke dato-formatet. - datoformatet skal være dd-mm-yyyy istedet for dd/mm-yyyy - den må gerne submitte hvis datoerne er ens.
På forhånd tak for hjælpen
Synes godt om
Slettet bruger
24. juli 2003 - 17:54#4
Hvorfor skal den ikke tjekke dato-formatet? Det kan jo ødelægge beregningen. Nå:
<html> <head> <script type="text/javascript"> function tjekDatoer(frm) { st = frm.start.value; sl = frm.slut.value; std = new Date(parseInt(st.split("-")[2], 10), parseInt(st.split("-")[1], 10) - 1, parseInt(st.split("-")[0], 10)); if (std.getDate() != parseInt(st.split("-")[0], 10) || std.getMonth() + 1 != parseInt(st.split("-")[1], 10) || std.getFullYear() != parseInt(st.split("-")[2], 10)) { alert("Startdatoen er ikke en gyldig dato!"); return false; } sld = new Date(parseInt(sl.split("-")[2], 10), parseInt(sl.split("-")[1], 10) - 1, parseInt(sl.split("-")[0], 10)); if (sld.getDate() != parseInt(sl.split("-")[0], 10) || sld.getMonth() + 1 != parseInt(sl.split("-")[1], 10) || sld.getFullYear() != parseInt(sl.split("-")[2], 10)) { alert("Slutdatoen er ikke en gyldig dato!"); return false; } if (std.getTime() > sld.getTime()) { alert("Startdatoen skal være før slutdatoen."); return false; } return true; } </script> </head> <body> <form onSubmit="return tjekDatoer(this);"> Start: <input type="text" name="start" value="dd-mm-åååå" size="10" /><br /> Slut: <input type="text" name="slut" value="dd-mm-åååå" size="10" /> <input type="submit" value="OK" /> </form> </body> </html>
Synes godt om
Slettet bruger
24. juli 2003 - 17:55#5
Og hvis du heller ikke vil teste datoernes gyldighed:
<script type="text/javascript"> function tjekDatoer(frm) { st = frm.start.value; sl = frm.slut.value; std = new Date(parseInt(st.split("-")[2], 10), parseInt(st.split("-")[1], 10) - 1, parseInt(st.split("-")[0], 10)); sld = new Date(parseInt(sl.split("-")[2], 10), parseInt(sl.split("-")[1], 10) - 1, parseInt(sl.split("-")[0], 10)); if (std.getTime() > sld.getTime()) { alert("Startdatoen skal være før slutdatoen."); return false; } return true; } </script>
Perfekt!! Mange tak for hjælpen. Den behøves ikke validere datoen, fordi feltet er readonly med en datovælger ved siden af, så det vil altid være korrekt. Skriv lige et svar, så du kan få dine point.
Hovsa - forkert indsat. Det er denne der er kortere:
<script type="text/javascript"> function tjekDatoer(frm) { st = frm.start.value.split('-'); sl = frm.slut.value.split('-'); std = new Date(st[2],st[1]-1,st[0]); sld = new Date(sl[2],sl[1]-1,sl[0]); if (std.getTime() > sld.getTime()) { alert("Startdatoen skal være før slutdatoen."); return false; } return true; } </script>
Det er som om den aldrig når til andet script - jeg har skrevet følgende:
<html> <body>
<SCRIPT LANGUAGE="JavaScript" type='text/javascript'> function tjekDatoer(frm) { st = frm.start.value.split('-'); sl = frm.slut.value.split('-'); std = new Date(st[2],st[1]-1,st[0]); sld = new Date(sl[2],sl[1]-1,sl[0]); if (std.getTime() > sld.getTime()) { alert("Startdatoen skal være før slutdatoen."); return false; } return true; } </SCRIPT>
<SCRIPT LANGUAGE="JavaScript" type='text/javascript'> function validate(objForm){ var errorMessage = ""; var firstError = ""; for (var i=0;i<objForm.length;i++){ switch(objForm[i].type){ case "text": if (objForm[i].required && !objForm[i].value){ errorMessage += objForm[i].feltnavn + "\n"; if (!firstError) firstError = objForm[i]; } break; } } if (errorMessage){ alert("Du har ikke udfyldt følgende felter:\n\n" + errorMessage); firstError.focus(); return false; } } </SCRIPT>
<SCRIPT LANGUAGE="JavaScript" type='text/javascript'> function valid(frm) { if (!validate(frm)) return false; if (!tjekDatoer(frm)) return false; return true; } </SCRIPT>
Hmm.. det var en anden på Eksperten der lavede den til mig. Nogen ide til hvordan jeg kunne skrive dette rigtig så? Kan stadig ikke få det til at virke. Hvor skal jeg sætte return true?
name="o_navn" hvis det er optional name="r_navn" hvis det er required
Og ellers, ja, så ville jeg tage felterne ét for ét. Det er selvfølgelig OK at checke om der står noget eller ej, men tit skal du alligevel lave et individuelt check på nogle af felterne. Og endelig er det noget der ligesågodt kan genereres fra serveren ud fra nogle specifikationer dér... men det er en længere historie (som Microsoft sikkert har taget patent på *gg*)
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.