Fragebogen mit Checkboxes auf CD
Sabine
- javascript
Hallo an alle,
um es voraus zu schicken, falls die Loesung ratteneinfach ist, dann sagt mir doch einfach die Adresse wo ich nachschlagen kann, ich bin nicht zu faul aber im Moment etwas zu daemlich zum suchen!
Mein problem:
Ein Fragebogen ist zu erstellen, auf CD, sprich ohne Server, ohne CGI.
Mein user hat immer 4 ankreuzmoeglichkeiten, Typ A bis Typ D, und er darf bei einer Frage auch Typ A und B anklicken.
So und jetzt meine Frage: WIE kann ich das "Auszaehlen" dem User abnehmehen, also ein Feld das einfach nur mitzaehlt fuer jeden Typ; Typ a = 4 , Typ B = 8, Typ c = 9.
ich hoffe es gibt ein Loesung, ihr lacht mich nicht aus, ich habe mich einigermassen verstaendlich ausgedrueckt, und ich kann den vermalledeiten Fragebogen machen.
Vielen dank im voraus
sabine
Hallo Sonja
Ein Fragebogen ist zu erstellen, auf CD, sprich ohne Server, ohne CGI.
Hier kommt es darauf an, was soll mit dem Fragebogen geschehen? Soll er versendet werden oder ist es eine Art Test, wo am Ende dem User eine Auswertung präsentiert wird.
Im ersten Fall benötigst du auf jeden Fall cgi, welches die versendeten Daten empfängt.
Die Daten selber bzw. ein Test kannst du mit js zusammenfassen bzw. auswerten.
Mein user hat immer 4 ankreuzmoeglichkeiten, Typ A bis Typ D, und er darf bei einer Frage auch Typ A und B anklicken.
So und jetzt meine Frage: WIE kann ich das "Auszaehlen" dem User abnehmehen, also ein Feld das einfach nur mitzaehlt fuer jeden Typ; Typ a = 4 , Typ B = 8, Typ c = 9.
Ich gehe davon aus, du hast Checkboxen. Du kannst jeder checkbox einen Wert zuordnen. Diesen Wert kannst du verarbeiten.
Beispiel:
<html>
<head>
<title>Werte</title>
<body>
<form onSubmit="pruef();return false;" name="Test">
<input type="Submit" value="Auswerten">
</form>
<script language="JavaScript">
<!--
function pruef()
{
x=0;
for (i=0;i<document.Test.elements.length;i++)
{
if (document.Test.elements[i].checked==true)
x=x+document.Test.elements[i].value*1;
}
alert(x);
}
//-->
</script>
</body>
</html>
Eine falsche Antwort kriegt dann z.B. den Wert 0. Ist alles ausgefüllt wird der Button auswerten gedrückt. Dieser ruft die Funktion pruef() auf. In der Funktion werden dann alle Checkboxen durchlaufen und geprüft. Wurde eine angeklickt, so wird ihr enthaltender Wert einfach zur Variablen x addiert (document.Test.elements[i].value*1 sorgt dafür, daß aus dem String eine Zahl wird). Die Variable x kannst du dann beliebig weiterverarbeiten bzw. ausgeben lassen.
ich hoffe es gibt ein Loesung, ihr lacht mich nicht aus,
zum Auslachen gibt es keinen grund, eine ernsthafte Frage kriegt eine ernsthafte Antwort
ich habe mich einigermassen verstaendlich ausgedrueckt, und ich kann den vermalledeiten Fragebogen machen.
Ich hoffe, die Lösung ist passend, wenn nicht frage einfach weiter.
Viele Grüße
Antje
Hallo Antje,
Hier kommt es darauf an, was soll mit dem Fragebogen geschehen? Soll er versendet werden oder ist es eine Art Test, wo am Ende dem User eine Auswertung präsentiert wird.
ne, nicht versenden. das ganze ist eine Selbsteinschaetzung eines Users auf einer CD.
und es gibt 12 fragen.
Und auf jede dieser 12 Fragen gibt es 4 Antworten, und zwar checkbox Typ A, checkbox Typ B, Ceckbox typ c, und Checkbox D.
jetzt habe ich mal in deinem Code, (vielen dank uebrigens, ich bin sehr gleucklich, dass du versuchst du helfen!!!) mal rumgespielt. das ganze funktioniert jetzt nicht, weil ich NICHT der Programmierheld bin. Aber vielleicht zeugt der Code ja wo mein problme ist.
Und meine Schwierigkeit ist nun: falls der Code irgendwann doch funktioniert: wir kann ich weitergehen?????
Ich moechte ja am Schluss eine Arte Auswertung: User du hast 3 mal A und 9 mal B angekreuzt, also bist du Typ B.
also nix mit Punken zusammenzaehlen, da komme ich in TeufelsKueche weil sich des nicht addieren darf.
-------der falsche Hoellencode------
<html>
<head>
<title>Werte</title>
<body>
<form onSubmit="pruef();return false;" name="Test">
<p>1<br>
<input type="checkbox" name="Frage1A" value=" false" >
A<br>
<input type="checkbox" name="Frage1B" value=" false">
B<br>
<input type="checkbox" name="Frage1C" value=" false">
C<br>
<input type="checkbox" name="Frage1D" value=" false">
D<br>
</p>
<input type="Submit" value="Auswerten">
</form>
<script language="JavaScript">
<!--
function pruef()
{
x=0;
for (i=0;i<5 ;i++)
{
if (document.Test.Frage1A== true)
{x=1;
alert(x);
break;
else
coninue;}
if (document.Test.Frage1B== true)
{x=2;
alert(x);
break;
else
coninue;
}
if (document.Test.Frage1C== true)
{x=3;
alert(x);
break;
else
coninue;
}
if (document.Test.Frage1D== true)
{x=4;
alert(x);
break;
else
coninue;
}
else
alert("sie meussen was ankreuzen");
}
}
//-->
</script>
</body>
</html>
--------
der code, und jetzt darf jeder schmunzeln, jau ich komme aus einer anderen Ecke...aber es hilft alles nix, ich muss damit irgendwie klarkommen.
vielen dank auf jeden fall fuer die bisherige Hilfe
sabine
Hi Sabine,
ich komme auch aus einer anderen Ecke und bin ziemlich unbeleckt in JavaScript, aber an Checkboxen + Auswertung habe ich auch gerade gebastelt. Dein Code ist übrigens wirklich höllisch. Ich geb dir mal meinen Code, ich glaube, der macht, was du möchtest, jedenfalls in Teilen:
<html>
<head>
<title>Checkereien</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript">
/* Zaehlvariablen fuer A,B,C,D */
zA = 0;
zB = 0;
zC = 0;
zD = 0;
/* Pruefen, was angekreuzt wurde */
function pruef(){
/* 1. Frage */
if(document.fragebogen.cb1[0].checked == true)
{
zA++;
}
if(document.fragebogen.cb1[1].checked == true)
{
zB++;
}
if(document.fragebogen.cb1[2].checked == true)
{
zC++;
}
if(document.fragebogen.cb1[3].checked == true)
{
zD++;
}
/* Frage 2 auswerten */
if(document.fragebogen.cb2[0].checked == true)
{
zA++;
}
if(document.fragebogen.cb2[1].checked == true)
{
zB++;
}
if(document.fragebogen.cb2[2].checked == true)
{
zC++;
}
if(document.fragebogen.cb2[3].checked == true)
{
zD++;
}
/* Frage 3 auswerten */
if(document.fragebogen.cb3[0].checked == true)
{
zA++;
}
if(document.fragebogen.cb3[1].checked == true)
{
zB++;
}
if(document.fragebogen.cb3[2].checked == true)
{
zC++;
}
if(document.fragebogen.cb3[3].checked == true)
{
zD++;
}
rueckmeldung();
}
/* Zaehlervariablen per Alert ausgeben */
function rueckmeldung(){
alert("Sie haben " +zA +" mal A, " +zB +" mal B, " +zC +" mal C und " +zD +" mal D angekreuzt.");
}
</script>
</head>
<body bgcolor="#FFFFFF">
<p>Ein Fragebogen:</p>
<form onsubmit="return false"; name="fragebogen">
<p>1. Frage: A
<input type="checkbox" name="cb1" value="checkbox">
B
<input type="checkbox" name="cb1" value="checkbox">
C
<input type="checkbox" name="cb1" value="checkbox">
D
<input type="checkbox" name="cb1" value="checkbox">
</p>
<p>2. Frage: A
<input type="checkbox" name="cb2" value="checkbox">
B
<input type="checkbox" name="cb2" value="checkbox">
C
<input type="checkbox" name="cb2" value="checkbox">
D
<input type="checkbox" name="cb2" value="checkbox">
</p>
<p>3. Frage: A
<input type="checkbox" name="cb3" value="checkbox">
B
<input type="checkbox" name="cb3" value="checkbox">
C
<input type="checkbox" name="cb3" value="checkbox">
D
<input type="checkbox" name="cb3" value="checkbox">
</p>
<p>
<input type="button" name="knopf" value="Auswerten" onClick="pruef()";>
</p>
</form>
<p> </p>
</body>
</html>
Anders als du benenne ich die zu einer Frage gehörenden Checkboxen mit demselben Namen. Durchnumeriert werden sie von alleine. Was angekreuzt wird, kansst du dann mit dem Schema
if(document.formularname.checkboxname[#].checked == true) abfragen, wobei du beachten mußt, dass die Zählung bei 0 anfängt.
Ganz oben im Script sind vier Variablen deklariert, die am Anfang alle auf 0 stehen und in Abhängigkeit davon hochgezählt werden, was angekreuzt ist. Auf diese Variablen wird dann im alert()-Befehl der Funktion rueckmeldung() wieder zugegriffen.
Vielleicht dir das ja aus der Hölle. Sollte sich rein zufällig <g> jemand hier rumtreiben, der eine elegantere Lösung vorschlagen kann, wäre ich sehr dankbar.
Alles Liebe, Uschi
Vielen vielen dank uschi,
das wars, ich bin nur noch am Strahlen ein Stein ist mir vom herzen!!!
<<<<<Dein Code ist übrigens wirklich höllisch.
oh ja das ist er, hier hat sich jeder totgelacht das ich mich trau was grottenfalsches hochzuposten, aber ich mal jetzt 2 Tage geandert, verbessert und hab nichts mehr verstanden und da erreiche ich dann ein gewisses: jau, lacht ueber mich,...aber bitte HELFEN :-))
--.und elegant oder nicht, glaub mir.-...das ist mir mitllerweile so egal....
vielen dank und ein wunderderschoene Woche
Sabine
Sollte sich rein zufällig <g> jemand hier rumtreiben,
der eine elegantere Lösung vorschlagen kann, wäre ich
sehr dankbar.
Ich fand Antjes Lösung eleganter.
Du und Sabine, ihr habt beide alle Formularelemente
einzeln ausgewertet. Wären es doppelt so viele, dann
wäre Euer Code doppelt so lang geworden - und wenn auch
nur ein einziges neues Formularfeld hinzukommt, müßt
ihr auch die Auswertungsroutine anpassen.
Antje hat sich zunutze gemacht, daß alle auszuwertenden
Elemente in einem Array der JavaScript-Objekthierarchie
zusammengefaßt sind. Sie hat also eine Schleife ver-
wendet, um diesen Array abzuarbeiten. Ihr Code ist damit
nicht von der Zahl der auszuwertenden Checkboxen abhängig,
also z. B. auch in verschiedenen Formularen verwendbar
(etwa über Einbinden aus einer externen JavaScript-Datei).
Und eine wiederverwendbare Lösung ist einem Unikat
in fast allen Fällen vorzuziehen.
Sollte sich rein zufällig <g> jemand hier rumtreiben,
der eine elegantere Lösung vorschlagen kann, wäre ich
sehr dankbar.Ich fand Antjes Lösung eleganter.
Ich auch, aber ich hatte das Problem, dass ich nicht wollte, dass alle Checkboxen in einem Array stehen, sondern nur die, die zu einer Frage gehören.
Für die Auswertung kommt es für mich darauf an, welche Kombinationen jemand innerhalb dieser Fragen anklickt. Jede Kombi soll eine eigene Rückmeldung kriegen. Zusätzlich habe ich noch das Problem, dass die Anzahl der Checkboxen pro Frage variiert. Ist also ein bischen anders als bei Sabine, die ohnehin nur 12 Fragen hat. Aber versprochen, ich denke weiter drüber nach. Mir war ja klar, dass das was ich da gepostet habe, der Weisheit letzter Schluss mit Sicherheit nicht ist.
So, und nun knabbere ich weiter.
LIebe Grüße, Uschi
Ich auch, aber ich hatte das Problem, dass ich nicht wollte, dass alle Checkboxen in einem Array stehen, sondern nur die, die zu einer Frage gehören.
Es geht ja nicht darum, daß die Chekcboxen in einem Array stehen, weil Du sie dort hineingepackt hättest, sondern weil das einfach Bestandteil der Objekthierarchie ist.
Für die Auswertung kommt es für mich darauf an, welche Kombinationen jemand innerhalb dieser Fragen anklickt. Jede Kombi soll eine eigene Rückmeldung kriegen. Zusätzlich habe ich noch das Problem, dass die Anzahl der Checkboxen pro Frage variiert. Ist also ein bischen anders als bei Sabine, die ohnehin nur 12 Fragen hat. Aber versprochen, ich denke weiter drüber nach. Mir war ja klar, dass das was ich da gepostet habe, der Weisheit letzter Schluss mit Sicherheit nicht ist.
Du kannst Antjes Lösung dahingegend modifizieren, daß Du nur einen Subrange des globalen Arrays bearbeitest (je einen pro Frage; dafür zwei zusätzliche Parameter "start" und "ende" mit entsprechenden Indexwerten an die Zählfunktion übergeben).