Kombi-Prüfung mit JS
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
anspruch
bedingung
code
datei
ergebnis
fassen
fehler
feld
frage
hilfe
jahr
jemand
kommentar
machen
monat
nehmen
problem
spezialist
stellen
zeichen
-
Hallo Zusammen,
bevor ich hier Frage habe ich bereits das große "G****" durchsucht aber nichts äquivalentes für mich gefunden.
Mein Problem:
Ich möchte in mein Formular mit jeder Menge INPUT-Feldern prüfen.
Dies funktioniert auch.
Allerdings muss ich drei (3) Felder in Komibnation prüfen.
Diese Felder sind "JAHR" (4-Stellen) Monat (2-Stellen) und ein Feld vom Type "Checkbox".
Folgendes muss geprüft werden:
Monat+Jahr+Checkbox-Feld gefüllt = Fehler
Monat+Jahr+Checkbox-Feld nicht gefüllt = Fehler
Monat+Jahr nicht geüllt aber Checkbox-Feld gefüllt = RICHTIG
Monat+Jahr geüllt aber Checkbox-Feld nicht gefüllt = RICHTIG
Irgendwie bekomme ich das nicht hin, bin allerdings kein JS-Spezialist.
Es wäre schön, wenn mir jemand ein Beispiel aufzeigen könnte.
Vielen Dank im voraus.
Freundliche Grüße
Ekiam
--------------------------------------------------------------------------------------
nichts auf der Welt ist vollkommen! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo ekiam,
Folgendes muss geprüft werden:
Monat+Jahr+Checkbox-Feld gefüllt = Fehler
Monat+Jahr+Checkbox-Feld nicht gefüllt = Fehler
Monat+Jahr nicht geüllt aber Checkbox-Feld gefüllt = RICHTIG
Monat+Jahr geüllt aber Checkbox-Feld nicht gefüllt = RICHTIG
eigentlich müsste das relativ einfach gehen:
if (/*checkbox gefüllt*/) { if (/*monat gefüllt oder (|) jahr gefüllt*/) { //Fehler } else { //Richtig } } else { //->checkbox nicht gefüllt if (/*monat && jahr gefüllt*/) { //Richtig } else { //Falsch } }
Irgendwie bekomme ich das nicht hin, bin allerdings kein JS-Spezialist.
Was du in JS dafür bracuhst sind nur das if-else-statement, dass sagt WENN Bedingung erfüllt DANN tue dass ANSONSTEN tue etwas anderes. Funktioniert wiefolgt:
if (bedingung) { //Anweisung } else { //Abweichende Anweisung }
Und die operatoren zum verknüpfen von Bedingungen:
und-Verknüpfung (wenn BEIDE bedingungen wahr sind): && (SHIFT + 6)
oder-Verknüpfung (wenn die eine, die andere ODER beide wahr sind): | (ALT GR + SPITZE KLAMMER (neben dem y)
Ich hoffe dein Problem verstanden und dir geholfen zu haben...
LG tobb10001 -
Die ausgeweitete Form:
var ergebnis = false; var monat_val = document.getElementById('monat_id').value != ""; var jahr_val = document.getElementById('jahr_id').value != ""; var checkbox_val = document.getElementById('checkbox_id').checked; if(monat_val){ if(jahr_val){ if(!checkbox_val){ ergebnis = true; } } } if(!monat_val){ if(!jahr_val){ if(checkbox_val){ ergebnis = true; } } } if(ergebnis){ ... }
Kurze Erklärung. Ich setze als erstes das Ergebnis auf false, da es im wesentlichen mehr false-Fälle gibt, als true-Fälle. (Ich nehme an, wenn Jahr, aber nicht Monat und nicht Checkbox wäre es auch falsch, usw.) So sparst du dir, jeden abstrusen Falsch-Fall zu prüfen und änderst es nur, wenn es halt richtrig ist. Dann speicher ich die Fälle in variablen, dadurch erspare ich mir nicht nur ein wenig Tipparbeit, sondern - falls ich am Ende etwas an den Bedingungen ändern will, muss ich das nur ein mal im Code machen und es wird für alle Stellen, wo das abgefragt wird, geändert.
Danach halt nur noch verschachtelte If-Abfragen, welche eigentlich selbsterklärend sein sollten.
Nun kann man das ganze - um Platz zu sparen - natürlich noch zusammen fassen. So könnte man schreibenif((monat_val)&&(jahr_val)){ if(!checkbox_val){ ergebnis = true; } }
Der &&-Operator überprüft, ob beide Aussagen wahr sind. Bzw. wenn ich mich nicht irre, ob die rechte Aussage mit der Linken übereinstimmt - was wichtig wäre, wenn man halt noch weiter auflösen will. Die Klammern lasse ich der Übersichtlichkeit halber mal drin, auch, wenn die nicht zwangsweise notwendig sind. So könnte man nun noch weiter auflösen:if(((monat_val)&&(jahr_val))&&(!checkbox_val)){ ergebnis = true; }
Das sollte ebenfalls funktionieren. So prüft er als erstes, ob
undmonat_val
wahr sind. Nehmen wir an, dem ist so, wird daraus dann einjahr_val
. Als nächstes prüft er, obif((true)&&(!checkbox_val))
nicht wahr ist. Nehmen wir an, dem ist nicht so, wird daraus dann eincheckbox_val
Beim letzten kommt "wahr" bei rau, weil eben abgefragt wird, ob es nicht wahr ist - durch dasif((true)&&(true))
. Dann überprüft er, ob wahr und wahr wahr sind, woraus sich ergibt:!
. Und schon hast du drei Dinger auf ein mal geprüft.if(true)
Dazu sei jedoch gesagt, dass es nicht immer Sinn macht, Dinge so zusammen zu fassen. Der Anspruch an Code sollte sein, dass er gut lesbar ist. Wenn jemand einen Blick auf den Code wirfst, sollte möglichst immer auf den ersten Blick offensichtlich sein, was gemeint ist. Dadurch entsteht gut wartbarer Code. -
Dazu sei jedoch gesagt, dass es nicht immer Sinn macht, Dinge so zusammen zu fassen. Der Anspruch an Code sollte sein, dass er gut lesbar ist. Wenn jemand einen Blick auf den Code wirfst, sollte möglichst immer auf den ersten Blick offensichtlich sein, was gemeint ist. Dadurch entsteht gut wartbarer Code.
Was dazu immer wesentlich beiträgt sind kommentare, damit auf "menschlich" nochmal festgehalten ist, was der Codeschnipsel macht/machen soll, da gibt es in Javascript die Möglichkeit mit
zu deklarieren (das Komenntar geht bis zu den schließenden Zeichen) oder mit/*abc*/
das Kommentar geht bis zum Zeilenende.//abc
LG tobb10001 -
tobb10001 schrieb:
Natürlich sind Kommentare ein gutes Mittel, um den Code auszuzeichnen. Aber es ist schwierig, da das richtige Maß zu finden. Ich für meinen Teil bevorzuge es, Kommentare bei eigenen Funktionen und Objekt-Methoden zu belassen, aber bei einfachen If-Conditions halte ich das meist einfach für übertrieben, alles zu kommentieren. Hier gilt es - meiner Meinung nach - eher darauf zu achten, dass der Code möglichst selbsterklärend ist. Also aussagekräftige Variablennamen, etc..
Was dazu immer wesentlich beiträgt sind kommentare, damit auf "menschlich" nochmal festgehalten ist, was der Codeschnipsel macht/machen soll, da gibt es in Javascript die Möglichkeit mit
zu deklarieren (das Komenntar geht bis zu den schließenden Zeichen) oder mit/*abc*/
das Kommentar geht bis zum Zeilenende.//abc
LG tobb10001
Vor allem bei Javascript, wo die Datei ja (ohne ordentliches Caching schlimmstenfalls sogar bei jedem Aufruf) schließlich ausgeliefert werden muss, sollte man denke ich auch darauf achten, dass Kommentare eine große Javascript-Datei schnell mal 10-15-mal so groß werden lassen können. Da (leider) auch heute noch viele Menschen mit relativ begrenzer Bandbreite und Datenvolumen zu kämpfen haben, sollte man letztenendes darauf achten, dass man dem Nutzer, dem der Programmierhintergrund eigentlich nicht interessiert, keinen Bärendienst erweist.
Ist aber wohl letztenendes eine Frage des Programmierstils und wird sicher von jedem ein wenig anders gehandhabt. -
@noxious: Da muss ich dir rechtgeben. Es kommt eben auch stark darauf an, wer den Code liest: Ob man selbst der einzige ist oder es möglichst die ganze Informatik Schulklasse verstehen soll. Und wie vertraut man mit dem Thema ist, also ob man Code schon zum 100. Mal in leicht abgewandelter Form oder ein neues Problem selbst erst zu 50% versteht.
LG tobb10001
Beitrag zuletzt geändert: 11.1.2017 15:18:32 von tobb10001 -
Hallo TOBB100001,
Hallo noxious,
ich bin diese Woche erst dazu gekommen Eure Hilfe in die Tat umzusetzen.
Es klappt jetzt SUPER.
Vielen Dank für Eure HILFE.
Ekiam
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage