Jeg syntes Ronny's kode er rigtig fin og et godt udgangspunkt, men jeg ville nok dele det lidt mere op. Og fjerne load eventlistneren. Hvis du ligger dine javascript scripts allerneders på din side lige inden </body></html> får du flere fordele:
* Siden vil load hurtigere
* Dit indhold vil være loadet.
Så istedet for load kaldet kan du lave:
- (function () {
- document.getElementById("kontaktform").onsubmit = valider;
-
- function valider() {
- ...
- }
- })();
Du kunne herefter samle dine fejlbeskeder i en variable så du ikke skal skrive den samme besked flere gange:
- var messages = {
- "empty" : "Du har ikke udfyldt {{field}}",
- "email" : "Du har ikke skrevet en gyldig email",
- ...
- };
-
- // fejl besked kan så laves til:
- if (document.getElementById("input-emne").value == "")
- {
- fejlnummer.push(5);
- fejlbesked.push(messages.empty.replace("{{field}}", "emne"));
- }
Men den del ville jeg nok også lave om, for du skal definere det for hvert id, her kunne man evt. bruge en class i stedet. og evt. en type. Nu vil jeg ikke skrive hele koden, men bare lidt pseudo kode. For det kode du har nu virker jo, men det er et eksempel til hvad du kan gøre i fremtiden så scriptet er mere genbrugeligt.
dine html elementer kunne hedde noget i stilen med
- <input type="text" class="text" value="" placeholder="Email emne" name="emne">
- <input type="text" class="text email" value="" placeholder="Email" name="email">
Din javascript kan så lave
- errors = {}
- foreach input.text
- if value.trim() = ""
- errors[input] = error[input || []
- errors[input].push("<li>"+ messages.empty.replace("{{field}}", input.name +"</li>")
-
-
- foreach input.email
- if !checkEmail(value)
- errors[input] = error[input] || []
- errors[input].push("<li>"+ messages.email.replace("{{field}}", input.name +"</li>")
-
-
- foreach errors as key => error
- key.nextSibling.innerHTML = "<ul>" + error.join("") + "</ul>"
Indlæg senest redigeret d. 30.12.2014 11:45 af Bruger #17081