# Kontaktformular: Speichern Button soll nur weiterleiten, wenn alle Felder ausgefüllt sind



## Alpinwhite (8. Nov 2018)

Hallo, ich mache eine Kontaktformular, wenn man einen neuen Kontakt anlegt soll der Speichern Button aber nur auf die Startseite zurückverlinken wenn alle Felder korrekt ausgefüllt sind. Im Moment wird mir nur eine Fehlermeldung mit Window Alert angezeigt, aber dann trotzdem auf die Startseite zurückgeleitet.

Wie bekomme ich das hin, dass man bei einer Fehlermeldung auf der Seite bleibt?


```
function kontaktSpeichern() {
  

  
    var kontakt = new Kontakt();
    kontakt.name = document.querySelector("#nameID").value;
    kontakt.email = document.querySelector("#emailID").value;
    kontakt.plz = document.querySelector("#plzID").value;
    kontakt.ort = document.querySelector("#ortID").value;
    kontakt.strasse = document.querySelector("#strasseID").value;
  

  
  

    try {
        kontakt.pruefe();
    }
    catch(err) {
        window.alert(err.message);
    }
```

Button

```
<a href="SuchDialog.html"><input class="button" type="submit" value="speichern" onclick="kontaktSpeichern()"></a>
```


```
pruefe() {
        if (this.name.trim() === "") {
            throw new Error("Der Name darf nicht leer sein!");
        } else if (this.email.trim() === "") {
            throw new Error("Die E-Mail-Adresse darf nicht leer sein!");
        } else if (this.plz.trim() === "") {
            throw new Error("Die Postleitzahl darf nicht leer sein!");
        } else if (this.ort.trim() === "") {
            throw new Error("Der Ort darf nicht leer sein!");
        } else if (this.strasse.trim() === "") {
            throw new Error("Die Strasse darf nicht leer sein!");
        } else {
            if (this.plz != parseInt(this.plz) || this.plz <= 0) {
                throw new Error("Die Postleitzahl muss eine Zahl > 0 sein!");
            } else if (!this.validateEmail(this.email)) {
                throw new Error("Die E-Mail-Adresse besitzt kein gültiges Format!");
            }
        }
    }
```


----------



## mihe7 (8. Nov 2018)

Siehe da: https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault


----------



## Thallius (8. Nov 2018)

mihe7 hat gesagt.:


> Siehe da: https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault



Ernsthaft? Also ich würde einfach die submit function überschreiben...


----------



## mrBrown (8. Nov 2018)

Thallius hat gesagt.:


> Ernsthaft? Also ich würde einfach die submit function überschreiben...


und wie?


----------



## Thallius (8. Nov 2018)

mrBrown hat gesagt.:


> und wie?



zum Beispiel damit

https://api.jquery.com/submit/


----------



## mrBrown (8. Nov 2018)

Da wäre @mihe7's Antwort genauso richtig...


----------



## mihe7 (8. Nov 2018)

@Thallius Ein paar Anmerkungen bzw. Ideen:

Ich mache kaum Web-Frontend, schon gar nicht mit Plain HTML/CSS (wenn ich da irgendwie drum rumkomme, bin ich der erste, der hier schreit ), JavaScript nur am Rande. Es wäre also durchaus möglich, dass es da bessere Möglichkeiten gibt.
Es könnte auch ein einfaches "return false" funktionieren (das wurde/wird aber, glaub ich, nicht von allen Browsern unterstützt)
JQuery braucht man heute kaum noch (querySelector/querySelectorAll).
Man könnte evtl. auch einen normalen Button statt eines submit-Buttons nehmen und das Formular per Code submitten


----------



## Thallius (8. Nov 2018)

mihe7 hat gesagt.:


> @Thallius Ein paar Anmerkungen bzw. Ideen
> 
> JQuery braucht man heute kaum noch (querySelector/querySelectorAll)



Ich wüßte keine Alternative mit der man wirklich performante dynamisch User interaktive Webseiten erstellen kann.


----------



## mihe7 (8. Nov 2018)

Thallius hat gesagt.:


> Ich wüßte keine Alternative mit der man wirklich performante dynamisch User interaktive Webseiten erstellen kann.


Mal rein des Interesses wegen: was ist denn an JQuery performanter als an Standard-JS?


----------



## Thallius (8. Nov 2018)

mihe7 hat gesagt.:


> Mal rein des Interesses wegen: was ist denn an JQuery performanter als an Standard-JS?



Natürlich nichts aber jetzt sag nicht du würdest lieber Standard JS nehmen als jquery?


----------



## mihe7 (8. Nov 2018)

Thallius hat gesagt.:


> du würdest lieber Standard JS nehmen als jquery?


Ich formuliere es mal anders: um eine Abhängigkeit einzuführen, brauche ich einen guten Grund. Mit querySelector(All), Arrow-Functions , fetch-API, Promises und Template Strings kommt man doch recht weit.


----------



## Thallius (8. Nov 2018)

mihe7 hat gesagt.:


> Ich formuliere es mal anders: um eine Abhängigkeit einzuführen, brauche ich einen guten Grund. Mit querySelector(All), Arrow-Functions , fetch-API, Promises und Template Strings kommt man doch recht weit.



Den Vorteil an jquery finde ich gerade, dass man eine klar definierte Abhängigkeit eingeht. Man kann eine Version fest als .js hinzuladen und muss diese niemals updaten (wenn man nicht will). Ich sehe jquery mehr als praktische Funktionensammlung denn als Framework.

Ich mag die Syntax der Ajax Requests und das Drag&Drop, FadeIn/Out etc


----------



## stg (9. Nov 2018)

[OT] Habt ihr die Accounts getauscht?  [/OT]


----------



## mihe7 (9. Nov 2018)

@stg wieso?


----------



## Thallius (9. Nov 2018)

stg hat gesagt.:


> [OT] Habt ihr die Accounts getauscht?  [/OT]



Du verwechselst da was. Mihe ist nicht DrBrown. Mit dem kann man diskutieren.


----------



## mihe7 (9. Nov 2018)

Ich steh noch immer auf der Leitung  Worum gehts?


----------



## Thallius (9. Nov 2018)

mihe7 hat gesagt.:


> Ich steh noch immer auf der Leitung  Worum gehts?



Ich denke er meint, weil ich sonst immer der bin der gegen Frameworks ist...


----------



## mihe7 (9. Nov 2018)

Und ich bin der, der sonst pro Framework ist? Das wäre mir jetzt allerdings neu 

Um zum Thema zurückzukommen: was ich meinte war, dass jQuery nicht mehr die Rolle spielt wie noch vor ein paar Jahren. Damals gehörte das schon zum "Lehrplan" angehender Webentwickler. Das würde ich heute nicht mehr sagen, weil vieles von dem, wofür jQuery eingesetzt wurde/wird, eben schon im Standard enthalten ist. So lange ich damit auskomme, sehe ich keinen Grund, was zusätzliches einzusetzen.


----------

