Problem bei Prüfen, ob Radiobutton ausgewählt
Leeloo5E
- javascript
Hallo,
habe eine dynamische Liste von Radiobuttons. Diese sollen auf Aktivierung überprüft werden. Also mindestens einer soll ausgewählt werden bevor es weiter geht. Bei mehr als zwei Radiobuttons ist das auch kein Problem. Wenn jedoch nur einer da ist, denkt JavaScript es wäre gar keiner ausgewählt, obwohl er angewählt wurde. Also kann es hier net weiter gehen.
Der JavaScript-Code:
var alleFalse = true;
for(i = 0; i < document.formular.radios.length; i++) {
if(document.formular.radios[i].checked == true) {
alleFalse = false;
break;
}//end if
}//end for
if (alleFalse == true) {
alert("Bitte eine Auswahl treffen!");
return false;
}//end if
Die Fehlerkonsole gibt diesbezüglich auch nichts her.
Fehler im Skript oder was is da los?
Gruß,
Leeloo
Hi,
habe eine dynamische Liste von Radiobuttons. Diese sollen auf Aktivierung überprüft werden. Also mindestens einer soll ausgewählt werden bevor es weiter geht. Bei mehr als zwei Radiobuttons ist das auch kein Problem. Wenn jedoch nur einer da ist, denkt JavaScript es wäre gar keiner ausgewählt, obwohl er angewählt wurde.
was ist denn in diesem Fall document.formular.radios gegenüber dem Fall, dass mehrere Radiobuttons vorliegen?
Cheatah
Hallo,
Hi,
habe eine dynamische Liste von Radiobuttons. Diese sollen auf Aktivierung überprüft werden. Also mindestens einer soll ausgewählt werden bevor es weiter geht. Bei mehr als zwei Radiobuttons ist das auch kein Problem. Wenn jedoch nur einer da ist, denkt JavaScript es wäre gar keiner ausgewählt, obwohl er angewählt wurde.
was ist denn in diesem Fall document.formular.radios gegenüber dem Fall, dass mehrere Radiobuttons vorliegen?
Bei mehreren Radiobuttons ist document.formular.radios ein Array. Und bei diesem kann man die Anzahl jener Elemente ermitteln (length).
Wenn nur einer da ist, wäre die Länge was? Nicht definiert? In dem Fall wäre document.formular.radios auch kein Array. Oder was? Also bräuchte ich eine Funktion, die prüft, ob document.formular.radios ein Array ist oder nicht? Gibt es sowas wie is_array() ???
Ich hab auch schon weiter gedacht. Bin aber an diesem Punkt gescheitert. Mag daran liegen, dass mir die Möglichkeiten von JavaScript noch nicht komplett bekannt sind ... leider.
Gruß,
Leeloo
Hi,
Bei mehreren Radiobuttons ist document.formular.radios ein Array. Und bei diesem kann man die Anzahl jener Elemente ermitteln (length).
jupp.
Wenn nur einer da ist, wäre die Länge was? Nicht definiert?
Ja. Genauer gesagt: undefiniert. Noch genauer: undefined.
In dem Fall wäre document.formular.radios auch kein Array. Oder was? Also bräuchte ich eine Funktion, die prüft, ob document.formular.radios ein Array ist oder nicht?
Korrekt.
Gibt es sowas wie is_array() ???
Sowas wie, ja. Im Prinzip hast Du selbst aber oben schon gesagt, was Du brauchst.
Ich hab auch schon weiter gedacht. Bin aber an diesem Punkt gescheitert. Mag daran liegen, dass mir die Möglichkeiten von JavaScript noch nicht komplett bekannt sind ... leider.
Mir sind sie auch noch nicht komplett bekannt, ich lerne immer wieder dazu. Ich vermute aber, dass Du "if" bereits kennst ;-)
Cheatah
Hallo,
Mir sind sie auch noch nicht komplett bekannt, ich lerne immer wieder dazu. Ich vermute aber, dass Du "if" bereits kennst ;-)
Jupp, "if" kenn ich. Nur weiß ich leider immer noch nicht, wie ich diese Informationen verarbeiten soll:
if (document.formular.radios == undefined)
if (document.formular.radios.checked == true)
...
}
}
???
Gruß,
Leeloo
Hi,
if (document.formular.radios == undefined)
wer ist undefined? Kleiner Tipp: Es sind nicht die Schweizer, schon gar nicht Ricola, äh, radios.
Cheatah
Hi,
if (document.formular.radios == undefined)
nein, den Wert darfst du nicht direkt abfragen, dann kassierst du sofort eine Fehlermeldung. Nicht nur der Wert, sondern schon der Typ ist undefiniert.
if (document.formular.radios.checked == true)
Ein expliziter Vergleich eines boolschen Ausdrucks auf den Wert true ist so überflüssig wie der Test, ob Wasser nass ist.
Ciao,
Martin
Genau das ist das Problem, wenn nix ausgewählt ist gibts auch kein Array. So würde es funktionieren:
for (i=0;i<document.forms[0].radios.length;i++)
{
if (document.forms[0].radios[i].checked)
{
user_input = document.forms[0].radios[i].value;
}
}
if(typeof user_input == "undefined")
{
alert('Sie haben keinen Punkt ausgewaehlt');
}
ich habe mal angenommen das deine radioboxen den namen "radios" haben. Fals nicht "radios" durch den Namen deiner Radioboxen ersetzen.
Hallo,
Genau das ist das Problem, wenn nix ausgewählt ist gibts auch kein Array. So würde es funktionieren:
for (i=0;i<document.forms[0].radios.length;i++)
{
if (document.forms[0].radios[i].checked)
{
user_input = document.forms[0].radios[i].value;
}
}
if(typeof user_input == "undefined")
{
alert('Sie haben keinen Punkt ausgewaehlt');
}
hey, cool. das funzt :-)))
ich habe mal angenommen das deine radioboxen den namen "radios" haben. Fals nicht "radios" durch den Namen deiner Radioboxen ersetzen.
jupp, in meinen Beispielen heißen meine Radiobuttons "radios". Obwohl man aus ihnen keine Musik erwarten kann. ;-)
Gruß und Danke nochmal,
Leeloo
Hallo,
Genau das ist das Problem, wenn nix ausgewählt ist gibts auch kein Array. So würde es funktionieren:
for (i=0;i<document.forms[0].radios.length;i++)
{
if (document.forms[0].radios[i].checked)
{
user_input = document.forms[0].radios[i].value;
}
}
if(typeof user_input == "undefined")
{
alert('Sie haben keinen Punkt ausgewaehlt');
}hey, cool. das funzt :-)))
oder doch nicht. Ich bin verwirrt. Oder es liegt daran, dass Freitag ist. Also jetzt funzt es wieder net. Seite neu geladen, Cache gelehrt. Hallo!? Bin ich blöd. Nur 1 Radiobutton und es geht wieder nicht. *grmpf* Feierabend für heut, oder?!
Gruß,
Leeloo
Hi,
hey, cool. das funzt :-)))
ja, es funzt. Schade nur, dass es nicht auch noch funktioniert. Der Code ist hinreichend dämlich.
Cheatah
wenn du mir noch sagst warum, nehm ich deinen letzteren satz vieleicht sogar ernst...
Hallo,
wenn du mir noch sagst warum, nehm ich deinen letzteren satz vieleicht sogar ernst...
Warum!? Das ist eine gute Frage. Wenn ich mir das so angugge, versuche ich ja wieder nur die Radios als Array auszuwerten. Nur wenn nur ein Radiobutton da ist, ists ja kein Array. Also ist user_input immer undefined, ob ich nun den einzigen Radiobutton angewählt habe oder nicht.
Gruß,
Leeloo
Warum!? Das ist eine gute Frage. Wenn ich mir das so angugge, versuche ich ja wieder nur die Radios als Array auszuwerten. Nur wenn nur ein Radiobutton da ist, ists ja kein Array. Also ist user_input immer undefined, ob ich nun den einzigen Radiobutton angewählt habe oder nicht.
Hi
Der Satz war eigentlich auf Cheatah's Bemerkung mit dem dämlich bezogen.
Aber noch kurz zu deiner Feststellung: Ja das ist korrekt, wenn du nur einen Radio hast, funktioniert der Code sehr wahrscheinlich nicht. Aber! Wenn du nur einen einzigen Radio hast, hast du definitiv das Falsche Element gewählt, eine Checkbox würde dann da besser passen.
(Der Sinn von Radio's ist etwas auszuwählen aus mehreren Optionen)
Hallo,
Der Satz war eigentlich auf Cheatah's Bemerkung mit dem dämlich bezogen.
Jo, hab ich mir gedacht. Wollte aber mal die Diskussion weiter führen. Dämlich finde ich deinen Code übrigens nicht. Mag aber auch daran liegen, dass ich mich noch nicht so gut mit JavaScript auskenne. Ansonsten funktioniert er ja.
Aber noch kurz zu deiner Feststellung: Ja das ist korrekt, wenn du nur einen Radio hast, funktioniert der Code sehr wahrscheinlich nicht. Aber! Wenn du nur einen einzigen Radio hast, hast du definitiv das Falsche Element gewählt, eine Checkbox würde dann da besser passen.
(Der Sinn von Radio's ist etwas auszuwählen aus mehreren Optionen)
Jupp, stimmt. Allerdings ist meine Gruppe von Radiobuttons dynamisch angelegt. D.h. die Gruppe von 1 bis 99 oder mehr Radiobuttons haben. Sie dienen dazu, einen Datensatz auszuwählen, damit der User dann damit eine Funktion vollziehen kann. Und am Anfang ist es möglich, dass eben nur 1 Datensatz, also auch nur 1 Radiobutton vorhanden ist. Hier soll dann aber auch überprüft werden, ob dieser Radiobutton ausgewählt ist oder nicht.
Wenn es nur ein Radiobutton gibt, ist es kein Array mehr, sondern nur eine einfache Variable, glaube ich. Hab auch schon versucht, zu überprüfen, obs ne Variable ist oder nen Array, aber irgendwie will das auch nicht klappen. Jedenfalls ignoriert mein Browser mein JavaScript diesbezüglich. *grmpf* Irgendwas mach ich also falsch. Muss ich also weiter probieren, was mir allerdings wieder nen Haufen Zeit kostet.
Gruß,
Leeloo
Wenn du die dinger schon dynamisch erzeugst, würde ich überprüfen wieviele Button erzeugt wurden, fals nur einer ausgewählt wurde, soll dieser auch gleich vorselektiert sein. (Sonst nervst du den Benutzer nur)
so tuts:
ausgewaehlt = false;
if( typeof(document.forms[0].radios.checked) == "undefined" )
{
// mehrere checkboxen
for (i=0;i<document.forms[0].radios.length;i++)
{
if (document.forms[0].radios[i].checked)
{
ausgewaehlt = true;
}
}
}
else
{
// nur eine checkbox vorhanden
ausgewaehlt = document.forms[0].radios.checked;
}
wir kucken also erst mal ob wir mehrere checkboxen haben, und handeln dann das entsprechend. ist die variable "ausgewaehlt" = true, wurde was ausgewählt.
wir kucken also erst mal ob wir mehrere checkboxen haben, und handeln dann das entsprechend.
Dein Skript macht etwas anderes.
if( document.forms[0].radios.length)
{
// mehrere checkboxen
for (var i = 0; i < document.forms[0].radios.length; i++)
{
if (document.forms[0].radios[i].checked)
ausgewaehlt = true;
}
}
else
{
// nur eine checkbox vorhanden
ausgewaehlt = document.forms[0].radios.checked;
}
Ich hab nicht alles gelesen, so stellst du fest ob mindestens eine checkbox in einer Gruppe von checkboxen angeklickt ist, wobei der Name schon auf die potentiellle Möglichkeit von Radioboxen hinweist.
Struppi.
Ich hab nicht alles gelesen, so stellst du fest ob mindestens eine checkbox in einer Gruppe von checkboxen angeklickt ist, wobei der Name schon auf die potentiellle Möglichkeit von Radioboxen hinweist.
Ja dann lies mal den REst, genau das war die Aufgabe....
Ich hab nicht alles gelesen, so stellst du fest ob mindestens eine checkbox in einer Gruppe von checkboxen angeklickt ist, wobei der Name schon auf die potentiellle Möglichkeit von Radioboxen hinweist.
Ja dann lies mal den REst, genau das war die Aufgabe....
Hab ich mittlerweile gemacht, also einfach auf length checken
if( document.forms[0].radios.length)
{
// mehrere Elemente mit dem Namen 'radios'
}
else
{
// maximal ein Element mit dem Namen 'radios'
}
Struppi.
Hallo,
Ja dann lies mal den REst, genau das war die Aufgabe....
Hab ich mittlerweile gemacht, also einfach auf length checken
if( document.forms[0].radios.length)
{
// mehrere Elemente mit dem Namen 'radios'
}
else
{
// maximal ein Element mit dem Namen 'radios'
}
>
Hey, klasse. Jetzt gehts. Aber wirklich ;-)
Hab das ganze noch ein wenig verfeinert bzw. etwas hinzugefügt:
~~~javascript
if ((typeof ausgewaehlt == "undefined") || (ausgewaehlt !== true)) {
alert("Bitte etwas auswählen !");
return false;
}//end if
Weil ohne gings net ;-)
Vorher hab ich "ausgwaehlt" noch auf FALSE gesetzt. Außerdem werd ich jetzt auch immer den 1. Radiobutton beim Aufruf automatisch anwählen.
Trotzdem ist so eine Überprüfung schon net schlecht.
THX euch allen.
Gruß,
Leeloo
Hey, klasse. Jetzt gehts. Aber wirklich ;-)
Hab das ganze noch ein wenig verfeinert bzw. etwas hinzugefügt:
[code lang=javascript]
if ((typeof ausgewaehlt == "undefined") || (ausgewaehlt !== true)) {
^^^^^
Du meinst vermutlich !=
Die doppelte Überprüfung ist unnötig if (! ausgewaehlt)
macht das gleiche.
Struppi.
Moin!
Bei mehr als zwei Radiobuttons ist das auch kein Problem. Wenn jedoch nur einer da ist, denkt JavaScript es wäre gar keiner ausgewählt, obwohl er angewählt wurde.
Mal ganz blöd gefragt: Hälst du es für bedientechnisch sinnvoll, nur einen einzigen Radiobutton anzubieten? Warum muß der Benutzer diesen einzigen Radiobutton dann noch aktivieren, wenn sowieso keinerlei Auswahl vorgenommen werden kann?
Eine passende Bezeichnung solcher Buttons wäre jedenfalls name="pandora" - denn nach der Aktivierung kriegt man ihn ja nie mehr inaktiv.
Fehler im Skript oder was is da los?
Du bist der akuten Problematikt zwar auf der Spur, dein Problem beginnt aber schon lange vorher, bei der Generierung der dynamischen Radiobuttonliste. Wenn es nur eine Auswahlmöglichkeit gibt - brauchst du keine Radios.
- Sven Rautenberg