Hab mir gedacht dass ich bei meinen input feldern einfach ein required ransetze (HTML5) das würde ja alles übernehmen. Klappt aber nicht. Formular wird dennoch direkt abgeschickt und success Meldung kommt.
Nun würde ich das ganze über jQuery machen, jedoch weiß ich nicht so recht wo ich die Abfrage, ob ein Feld leer ist einbauen soll.
Sähe dann so aus:
if (jQuery('#inputfeld').val() == '') {
jQuery(this).css('border','1px solid red');
}
Logischerweise soll es vor dem success von ajax passieren was es dann auch verhindert.
Hat jemand ne Idee?
Ich würde es in den beforesend Handler von $.ajax() schreiben, und unter die CSS-Zuweisung muss dann natürlich ein return false. Außerdem noch ein separates Event, welches beim Klick in ein Input-Feld den roten Rahmen wieder entfernt.
Nebenbei: Die HTML5-Formvalidierung würde den Versand per HTML unterdrücken. Aber das schaltest du ja mit preventDefault() ab, um statt dessen Ajax zu verwenden.
Danke, die Zuweisung war falsch.
Ist jetzt korrigiert, kriege auch keine Fehlermeldung mehr beim abschicken.
Blöderweise kommt es jetzt immernoch zur success Meldung.
Hier der aktuelle Code:
Das return false ist jetzt auch in der Abfrage drin. Das eine ist ein daher das .html und nicht .val
Die If-Abfrage scheint nicht zu greifen hmm.
Jemand ne Idee?
Was passiert denn, wenn du nur return false mit beforesend übergibst?
Ansonsten löst man solche Probleme durch Vereinfachung. Mal jQuery(‚#kontakt_nachricht‘).val() in die Konsole eingeben und sich das Ergebnis anschauen, die Abfrage in: var foo = ‚foo‘ != ''bar ? true : false; console.log(foo); umbauen, etc. …
Hab auch mal jQuery(‚#kontakt_nachricht‘).val() in die konsole eingegeben da kommt als ergebnis „“ raus. Stimmt also alles.
Wundert mich dass es trotz return false weitergeht zum success.
Das ist ne gute Idee. Bin aber nun hinter meinen Fehler gekommen. Lag daran dass ich bei success die function mit jQuery aufgerufen habe. Also jQuery(function() anstatt nur function()
Leider wird der Border bei this nicht vergeben sondern halt nur wenn ich konkret angebe welches input den Border kriegen soll. Gäbe es da ne möglichkeit nur dem input den Border zu geben dass leer ist?
each() ist das Äquivalent zu for-in in JS und foreach in PHP. Es iteriert über ein Array oder Objekt und liefert bedarfsweise index und value zurück. In jQuery gibt es dafür sogar zwei Funktionen: $(‚foo‘).each() und $.each(). Näheres steht in der Doku.
Pattern (ungetestet):
$('input').each(function() {
if ($(this).val = "") {
$(this).css('border', '1px red solid');
}
})