Eingabeprüfung von ratio nicht mit checked == false?
alex
- javascript
Hallo!
Bin immer noch an meiner Formularüberprüfung. für Checkboxen habe ich jetzt folgende FUnktion, die auch funktioniert:
if(document.Formular.AGBs.checked == false)
{
alert("Test!");
document.Formular.AGBs.focus();
return false;
}
Ich hatte das so verstanden, dass das genau so mit Ratio-Feldern geht, aber das geht nicht, das wird einfach übergangen. Wie kann ich überprüfen, ob überhaupt ein Optionsfeld ausgewählt ist?
Gruß Alex
Hallo alex!
Radio-Buttons bilden ein Array (immer die, die den gleichen Namen haben und darurch gegenseitig auslösend sind)
http://www.teamone.de/selfhtml/tecbbda.htm#a2
Gruss,
Carsten
Hi Carsten!
Danke, hab das jetzt so gelöst:
<script language="JavaScript">
<!--
function chkFormular()
{
if(document.Formular.Bezahlung[0].checked == false
&& document.Formular.Bezahlung[1].checked == false
&& document.Formular.Bezahlung[2].checked == false)
&& document.Formular.Bezahlung[3].checked == false))
{
alert("Bitte wählen Sie eine Zahlungsmethode!");
document.Formular.Bezahlung.focus();
return false;
}
}
//-->
</SCRIPT>
Danke nochmal
Gruß
Alex
PS: Sicher geht der Code bestimmt eleganter, aber ich habe leider nicht Informatik studiert, noch hatte ich damit was im Studium oder in der Schule zu tun!
Also so mit den Klammern:-)
<script language="JavaScript">
<!--
function chkFormular()
{
if(document.Formular.Bezahlung[0].checked == false
&& document.Formular.Bezahlung[1].checked == false
&& document.Formular.Bezahlung[2].checked == false
&& document.Formular.Bezahlung[3].checked == false)
{
alert("Bitte wählen Sie eine Zahlungsmethode!");
document.Formular.Bezahlung.focus();
return false;
}
}
//-->
</SCRIPT>
<script language="JavaScript">
<!--
function chkFormular()
{
if(document.Formular.Bezahlungcchecked == false
&& document.Formular.Bezahlung[1].checked == false
&& document.Formular.Bezahlung[2].checked == false
&& document.Formular.Bezahlung[3].checked == false)
{
alert("Bitte wählen Sie eine Zahlungsmethode!");
document.Formular.Bezahlung.focus();
return false;
}
}
//-->
</SCRIPT>
Hallo!
Jetzt habe ich dieses Script eingearbeitet, Problem ist jetzt, dass zwar das Alert Fenster kommt, wenn nichts ausgewählt, aber wenn ich dann auf OK klicke, wird das Formuar trotzdem abgeschickt!!!
Ich hab auch Bezahlung[0].focus() probiert, bringt auch nichts. Was könnte das sein?
Gruß
Alex
Auch Hallo!
Jetzt habe ich dieses Script eingearbeitet, Problem ist jetzt, dass zwar das Alert Fenster kommt, wenn nichts ausgewählt, aber wenn ich dann auf OK klicke, wird das Formuar trotzdem abgeschickt!!!
Kommt drauf an, wie Du chkFormular() aufrufst. Ich nehme mal an, im onSubmit-Handler des Formulars. Dann musst Du dem Browser einfach sagen, dass er das Formular nicht abschicken soll, und zwar indem der Handler-Code false zurueckgibt. Da Dein chkFormular auch schon false zurueckgibt, reicht es, diesen Wert einfach durchzureichen mit:
onSubmit="return chkFormular();"
Im Nicht-Fehlerfall muss die Routine aber true zurueckgeben, dass musst Du also oben nich einbauen.
So long
Hi!
Genau das, onSubmit="return chkFormular()" habe ich da stehen. Oder was meinst Du???
Gruß
Alex
Moin again!
Genau das, onSubmit="return chkFormular()" habe ich da stehen. Oder was meinst Du???
Dann sollte das Formular nicht abgeschickt werden, wenn Du false zurueckgibst. Ansonsten hat Dein Browser wohl einen Bug. Kannst es ja mal mit einem anderen testen.
So long
if(document.Formular.AGBs.checked == false)
Hallo,
zum eigentlichen Thema hab ich nichts zu sagen, mir fällt aber was anderes immer wieder auf.
Wo kommen eigentlich Konstrukte wie
if(bedingung==true) (oder false) her?
Diese Abfrage funktioniert, liefert auch das richtige Ergebnis, aber trotzdem ist sie etwas seltsam...
Bedingung ist schliesslich bereits eine boolsche Variable, sie ist bereits wahr oder falsch, das muss nicht nochmals mit == auf Übereinstimmung mit einer der beiden Konstanten "true" oder "false" verglichen werden.
Man fragt schliesslich auch nicht ab in der Art von
"if((a==5)==true)", naürlich benutzt man nur "if(a==5)"
Wenn die Bedingung aber selbst eine boolsche Variable ist (document.Formular.AGBs.checked) benutzen viele Leute einen erneuten Vergleich, warum?
Die obige Abfrage sollte meiner Meinung eher so lauten:
if(!document.Formular.AGBs.checked)
(wobei ! der Verneinungsoperator ist, aus true wird mittels dem ! ein false, also "true" ist dasselbe wie "!false" und umgekehrt, was ich allerdings tasächlich in dieser Form bei selfhtml nirgendwo nachlesen kann, auf der Seite, wo die Operatoren http://www.teamone.de/selfhtml/tebf.htm#a7 erklärt werden findet sich lediglich in der Operatorenreihenfolge der ! Operator, berichtigt mich bitte falls ich die eigentliche Erklärung nur irgendwo übersehen habe.)
Mag sein das ich hier Bitspalterei betreibe, aber das begegnet mir immer wieder in irgenwelchen Listings (und lange nicht nur in Javascript-Listings!), und mir ist nicht ganz klar warum.
Irgendwelche Ideen? Ich glaube nicht daß das nur Unwissenheit ist, auch "Cracks" benutzen das...
Bye
Wolfgang
N'Abend,
zum eigentlichen Thema hab ich nichts zu sagen, mir fällt aber was anderes immer wieder auf.
Oh, ein aufmerksamer Zeitgenosse. :-)
Wo kommen eigentlich Konstrukte wie
if(bedingung==true) (oder false) her?
Diese Abfrage funktioniert, liefert auch das richtige Ergebnis, aber trotzdem ist sie etwas seltsam...
Warum soll sie seltsam sein?
Bedingung ist schliesslich bereits eine boolsche Variable, sie ist bereits wahr oder falsch, das muss nicht nochmals mit == auf Übereinstimmung mit einer der beiden Konstanten "true" oder "false" verglichen werden.
Man fragt schliesslich auch nicht ab in der Art von
"if((a==5)==true)", naürlich benutzt man nur "if(a==5)"
Gegeben sei der folgende Ausdruck:
if(variable==xyz){
Befehl1;
Befehl2;
}
Die Befehle in der if-Klammerung werden nur ausgeführt, wenn die zugehörige Bedingung "Der Wert der Variablen ist gleich xyz" wahr ist.
Eine Konstruktion der Art if(a==5) heißt nun: Vergleiche den Wert von a mit der Zahl 5 und wenn er übereinstimmt ist die Bedingung wahr und die if-Befehle können ausgeführt werden.
Eine Konstruktion der Art if( (a==5)==true ) beinhaltet zwei Vergleiche! Vergleiche zuerst a mit der Zahl 5. Vergleiche dann das Ergebnis dieses Vergleiches (entweder true oder false) mit dem Wert true. Wenn die zweite Bedingung erfüllt ist (den Wert true annimmt), dann führe die if-Befehle aus. Der zweite Vergleich kann aber nur den Wert true annehmen, wenn die erste Bedingung erfüllt ist.
Deine beiden obigen Ausdrücke sind also problemlos gegeneinander austauschbar, keiner ist falsch und vor allem: keiner ist besser als der andere. :-)
Wenn die Bedingung aber selbst eine boolsche Variable ist (document.Formular.AGBs.checked) benutzen viele Leute einen erneuten Vergleich, warum?
Da musst Du die anderen Leute fragen. :-)
Die obige Abfrage sollte meiner Meinung eher so lauten:
if(!document.Formular.AGBs.checked)
Sie kann so lauten, muss aber nicht, es kommt darauf an wieviel Schreibarbeit man sich machen möchte und wie übersichtlich die Bedingungen sein sollen.
Wenn Du ein Skript programmierst und jemand anderes soll es vielleicht mal verändern oder weiter anpassen, dann sind klare Ausdrücke der Form if(boolscheVariable == true) leichter verständlich.
Mag sein das ich hier Bitspalterei betreibe, aber das begegnet mir immer wieder in irgenwelchen Listings (und lange nicht nur in Javascript-Listings!), und mir ist nicht ganz klar warum.
Irgendwelche Ideen? Ich glaube nicht daß das nur Unwissenheit ist, auch "Cracks" benutzen das...
Das Problem liegt einfach darin, dass Du Dir klar machen musst, dass alles, was in der Bedinung zu Deinem if steht, wahr sein muss, damit die entsprechenden Befehle ausgeführt werden. Wenn Du keine boolesche Variable hast, musst Du vergleichen, wenn Du eine boolsche Variable hast, kannst Du vergleichen, zwingend notwendig ist es aber nicht.
Es kommt darauf an, ob man nicht der Übersichtlichkeit halber doch einen Vergleich mehr reinschreibt.
Ich hoffe ich konnte Deine Verwirrung etwas entwirren. :-)
Grüße
Andreas
Grüssi!
Warum soll sie seltsam sein?
Dazu müsste man etwas weiter ausholen! Was sind Ausdrücke? Man könnte sogar bis zur Aussagen/Prädikatenlogik ausholen! Eine Aussage ist immer entweder Wahr oder Falsch!
Alle obigen "Aussagen" sind gültige Ausdrücke! Sie werden bereits evaluiert zu true/false, wieso also nochmal abfragen ob true == true?
Wenn Du ein Skript programmierst und jemand anderes soll es vielleicht mal verändern oder weiter anpassen, dann sind klare Ausdrücke der Form if(boolscheVariable == true) leichter verständlich.
ich finde genau das Gegenteil! if(checked) ist für mich leichter zu lesen als if(checked==true)
Und den Verneinungsoperator sollte man ohnehin kennen, wenn man sich mit Programmiersprachen beschäftigt!
Das Problem liegt einfach darin, dass Du Dir klar machen musst, dass alles, was in der Bedinung zu Deinem if steht, wahr sein muss, damit die entsprechenden Befehle ausgeführt werden. Wenn Du keine boolesche Variable hast, musst Du vergleichen, wenn Du eine boolsche Variable hast, kannst Du vergleichen, zwingend notwendig ist es aber nicht.
Auch eine nicht-boolsche Variable wird evaluiert zu einem Boolschen Ausdruck!
Es kommt darauf an, ob man nicht der Übersichtlichkeit halber doch einen Vergleich mehr reinschreibt.
Ich hoffe ich konnte Deine Verwirrung etwas entwirren. :-)
Genau das (Verwirrung) passiert jedoch wenn man unnötige Abfragen einbaut! Auf der Uni lernten wir in der ersten Stunde von Programmiertechnik diese x==true Abfragen nur dort einzusetzen wo sie wirklich nötig sind (also fast nie *fg*), man sagte uns es sei einfach ein schlechter Stil und zeuge nicht gerade von der Fähigkeit/Wissen eines Programmierers!
Ist also auch ein bissl Geschmackssache ;-)
lg bernhard
Hallo an alle Lesenden und Antwortenden!
» »» Warum soll sie seltsam sein?
Dazu müsste man etwas weiter ausholen! Was sind Ausdrücke? Man könnte sogar bis zur Aussagen/Prädikatenlogik ausholen! Eine Aussage ist immer entweder Wahr oder Falsch!
Dass eine Aussage immer entweder wahr oder falsch ist, sollte jedem klar sein. Aber deswegen ist noch lange nicht seltsam. :-)
- a==5; ist eine wahre Aussage wenn a gleich 5 ist.
- a=5; ist eine (wahre) Aussage (vorausgesetzt es wird 5 fehlerfrei auf a zugewiesen)
- sogar 5; selber ist eine (wahre) Aussage! -- komisch wirds bei 0; .-)
- document.formular.auswahl.checked ist eine Aussage
Alle obigen "Aussagen" sind gültige Ausdrücke! Sie werden bereits evaluiert zu true/false, wieso also nochmal abfragen ob true == true?
Es ging ja auch grundsätzlich darum, warum der eine Programmierer die boolsche Variable nochmals vergleicht und wieso es ein anderer Programmierer nicht macht. Dass die Vorgehensweise (a==5)==true keiner macht (zumindest keiner, den ich kenne), dürfte als vorausgesetzt gelten, obwohl sie nicht falsch ist.
Wenn Du ein Skript programmierst und jemand anderes soll es vielleicht mal verändern oder weiter anpassen, dann sind klare Ausdrücke der Form if(boolscheVariable == true) leichter verständlich.
ich finde genau das Gegenteil! if(checked) ist für mich leichter zu lesen als if(checked==true)
Wenn man mal programmiert hat, ist es eigentlich egal welche Ausdrücke man verwendet, aber es soll ja auch Leute geben, die da nicht so firm sind. Und meiner Erfahrung nach haben diese Menschen Probleme mit if(checked). Meine eigenen Skripte, die sonst keiner weiter bearbeiten muss, schreibe ich in dieser Art, weil ich mir damit "==true" an Schreibarbeit sparen kann. :-)
Und den Verneinungsoperator sollte man ohnehin kennen, wenn man sich mit Programmiersprachen beschäftigt!
Sollte man schon, aber es gibt genug, die den Operator nicht kennen, das ist genauso wie bei Pascal, wenn jemand fragt, was da jetzt das NOT soll. *augenverdreh* :-)
Auch eine nicht-boolsche Variable wird evaluiert zu einem Boolschen Ausdruck!
Aber doch erst, wenn ich sie mit einem bestimmten Wert (oder Wertebereich) verglichen habe, oder? Wenn meine nicht-boolsche Variable a den Wert 5 hat, dann bekomme ich noch lange keinen boolschen Ausdruck, wenn ich die Variable nicht mit etwas vergleiche.
Die Zuweisung des Wertes 5 zu meiner Variablen a mittels a=5 ergibt doch auch nur einen boolschen Ausdruck, wenn ich den Vergleich anstelle: "(Zuweisung a=5) == (fehlerfreie Zuweisung)"
Es kommt darauf an, ob man nicht der Übersichtlichkeit halber doch einen Vergleich mehr reinschreibt.
Ich hoffe ich konnte Deine Verwirrung etwas entwirren. :-)
Genau das (Verwirrung) passiert jedoch wenn man unnötige Abfragen einbaut! Auf der Uni lernten wir in der ersten Stunde von Programmiertechnik diese x==true Abfragen nur dort einzusetzen wo sie wirklich nötig sind (also fast nie *fg*), man sagte uns es sei einfach ein schlechter Stil und zeuge nicht gerade von der Fähigkeit/Wissen eines Programmierers!
Hmm, auf welcher Uni bist Du? Ich studiere Maschinenbau in Karlsruhe und da hatte ich zwei Semester Informatik, eines davon ist Programmieren mit Java. Uns hat man "aus Gründen der Übersichtlichkeit" nahe gelegt zu unterscheiden zwischen dem "Wert einer Variablen" und dem "Ergebnis eines Ausdruckes", wobei mir durchaus bewusst ist, dass der Wert einer Variablen das Ergebnis eines Ausdrucks ist. Die Vorlesung wurde übrigens von einem Prof. der Fakultät für Informatik gehalten, ebenso wie die Programmier-Übungen von Informatik-Studenten betreut wurden. :-)
Ist also auch ein bissl Geschmackssache ;-)
Vielleicht sollten sich auch mal die Professoren einigen, was eigentlich gelehrt wird. Erst wenn sich die mal geeinigt haben, können sie von gutem oder schlechtem Stil sprechen, bzw. von welcher Stil von welchen Fähigkeiten zeugt. ;-)
Wenn ich einen Motor konstruiere, gibt es ja schließlich auch mehrere, genau gesagt sogar unedlich viele, funktionierende Lösungen, aber es gibt nicht DIE richtige Lösung, die von hervorragendem Wissen zeugen würde.
Ich sage jetzt einfach mal als Fazit: Jedem so wie es ihm gefällt. :-)
Grüße
Andreas
Grüssi Andreas
Dass die Vorgehensweise (a==5)==true keiner macht (zumindest keiner, den ich kenne), dürfte als vorausgesetzt gelten, obwohl sie nicht falsch ist.
Alles was ich damit aufzeigen wollte, war dass ((a==5)==true) theoretisch dasselbe ist wie (x==true) oder (document.formular.checked==true). Bei den letzteren Varianten sieht man auf den ersten Blick einfach nicht so schön, welchen Stuss man da eigentlich schreibt ;-)
Auch eine nicht-boolsche Variable wird evaluiert zu einem Boolschen Ausdruck!
Aber doch erst, wenn ich sie mit einem bestimmten Wert (oder Wertebereich) verglichen habe, oder? Wenn meine nicht-boolsche Variable a den Wert 5 hat, dann bekomme ich noch lange keinen boolschen Ausdruck, wenn ich die Variable nicht mit etwas vergleiche.
bei (a==5) werden beide Seite ausgelesen, verglichen, und für true oder false befunden, und genau das wird auch zurückgegeben.
<script>
var a=4;
func(a==5);
function func(a) { alert(a.toString()); }
</script>
Die Zuweisung des Wertes 5 zu meiner Variablen a mittels a=5 ergibt doch auch nur einen boolschen Ausdruck, wenn ich den Vergleich anstelle: "(Zuweisung a=5) == (fehlerfreie Zuweisung)"
Naja, bei Zuweisungen wird die rechte Seite ausgelesen, und der Wert auf 'a' übertragen. Der Zuweisungsoperator '=' liefert den Wert der linken Seite, nach erfolgter Wertübertragung! 'a' (und somit auch der ganze Ausdruck) hat also den Wert 5 -> an sich noch kein boolscher Wert. "Konvertiert" man diesen Wert allerdings in einen boolschen Kontext (if-Bedingung), so ist alles (jeder Ausdruck) der nicht zu 0 ausgewertet wird true, und 0 selber false.
<script>
if(a=3) {
alert("true: "+a);
} else {
alert("false: "+a);
}
</script>
ersetze den Funktionsaufruf mal durch func(a=0); Es hängt also nicht davon ab, ob die Zuweisung geklappt hat, sondern auf den Wert den dieser Ausdruck liefert (0 oder != 0).
Das ist auch der Grund, warum Zuweisungen in Bedingungen (if-statements, schleifen, ...) gefährlich sind.
Hmm, auf welcher Uni bist Du? Ich studiere Maschinenbau in Karlsruhe und da hatte ich zwei Semester Informatik, eines davon ist Programmieren mit Java.
Ich studiere Wirtschaftsinformatik in Wien, wir lernten Programmieren mit C++, aber ansonsten wars wahrscheinlich ähnlich chaotisch wie bei dir ;-)
Uns hat man "aus Gründen der Übersichtlichkeit" nahe gelegt zu unterscheiden zwischen dem "Wert einer Variablen" und dem "Ergebnis eines Ausdruckes", wobei mir durchaus bewusst ist, dass der Wert einer Variablen das Ergebnis eines Ausdrucks ist.
Ich komme mit der Formulierung "Ergebnis" eines Ausdrucks nicht klar. "Wert" eines Ausdrucks (true,false) wäre irgendwie einfacher zu verstehen (für mich) Denn das "Ergebnis" einer Zuweisung (ist ja ein Ausdruck) ist eine zwei/mehrdeutige Formulierung.
Ist also auch ein bissl Geschmackssache ;-)
Wenn ich einen Motor konstruiere, gibt es ja schließlich auch mehrere, genau gesagt sogar unedlich viele, funktionierende Lösungen, aber es gibt nicht DIE richtige Lösung, die von hervorragendem Wissen zeugen würde.
Genau das ist ja das schöne daran. Gäbs immer nur eine richtige Lösung, wär das ganze wahrscheinlich nicht sehr produktiv ;-)
Ich sage jetzt einfach mal als Fazit: Jedem so wie es ihm gefällt. :-)
jo, damit kann ich mich anfreunden! -- solang hier keiner ankommt und if((a==5)==true) in sein Javascript schreibt ;-) *g*
lg aus Wien,
bernhard
Grüssi Andreas
... nochmal
<script>
if(a=3) {
alert("true: "+a);
} else {
alert("false: "+a);
}
</script>
ersetze den Funktionsaufruf mal durch func(a=0);
Absoluter Stuss natürlich! Weit und breit kein Funktionsaufruf zu sehen! Ich hab vorher geschrieben, und danach den Code geändert ... tja, klassischer Fehler :-(
Natürlich sollst du die if-Bedingung entsprechend anpassend, nicht den nicht-existierenden Funktionsaufruf ;-)
lg bernhard
Hallöle Bernhard,
Hab gestern Nacht ,al ein bisschen auf Skripte aufgepasst und als ich auf einer Seite war, bei der mir Opera einen Skript-Fehler angegeben hat, habe ich mak nachgeschaut, woran es liegt. Da war ich dann etwas überrascht.
Da stand nämlich: if(bedingung)==true *g* Passt irgendwie zum Thema, aber jetzt frag mich nicht, auf welcher dämlichen Seite das war, ich bin gleich weitergesprungen.
Hmm, auf welcher Uni bist Du? Ich studiere Maschinenbau in Karlsruhe und da hatte ich zwei Semester Informatik, eines davon ist Programmieren mit Java.
Ich studiere Wirtschaftsinformatik in Wien, wir lernten Programmieren mit C++, aber ansonsten wars wahrscheinlich ähnlich chaotisch wie bei dir ;-)
Wahrscheinlich. :-) Macht aber nix, hab das ganze auch so bestanden, obwohl ich solche Konstruktionen wie if(boolscheVar==true) vermieden habe. :-)
Uns hat man "aus Gründen der Übersichtlichkeit" nahe gelegt zu unterscheiden zwischen dem "Wert einer Variablen" und dem "Ergebnis eines Ausdruckes", wobei mir durchaus bewusst ist, dass der Wert einer Variablen das Ergebnis eines Ausdrucks ist.
Ich komme mit der Formulierung "Ergebnis" eines Ausdrucks nicht klar. "Wert" eines Ausdrucks (true,false) wäre irgendwie einfacher zu verstehen (für mich) Denn das "Ergebnis" einer Zuweisung (ist ja ein Ausdruck) ist eine zwei/mehrdeutige Formulierung.
Ich hab's als Zitat aus dem Skript abgetippt. *g* Ich hab's mir nicht genauer angesehen.
Wenn ich einen Motor konstruiere, gibt es ja schließlich auch mehrere, genau gesagt sogar unedlich viele, funktionierende Lösungen, aber es gibt nicht DIE richtige Lösung, die von hervorragendem Wissen zeugen würde.
Genau das ist ja das schöne daran. Gäbs immer nur eine richtige Lösung, wär das ganze wahrscheinlich nicht sehr produktiv ;-)
Würde das Studium vereinfachen und verlangweilen. ;-)
Ich sage jetzt einfach mal als Fazit: Jedem so wie es ihm gefällt. :-)
jo, damit kann ich mich anfreunden! -- solang hier keiner ankommt und if((a==5)==true) in sein Javascript schreibt ;-) *g*
s.o. *g* Genauso schlimm.
Viel Spaß und Erfolg noch beim Studium! Grüße
Andreas
Hi!
Mmh... eigentlich hab ich hier schonmal ne Antwort geschrieben, aber irgendwie ist die wohl verschwunden. Jedenfalls hatte ich da die Notation der Bedingung mit dem "wie man's spricht" verglichen. Und da fragt man ja normalerweise nicht:
Wenn 'der Haken ist gesetzt' wahr ist, [tue...] ( if (checked == true) )
oder teiloptimiert:
Wenn es war ist, dass der Haken gesetzt ist...
sondern
Wenn der Haken gesetzt ist ( if (checked) )
Deshalb mag ich die letztere Notation auch lieber. Aber es stimmt, ich hab auch beobachtet, dass gerade Anfaenger lieber die ausfuehrliche Variante waehlen.
So long