Dynamischer Fragebogen

Status
Nicht offen für weitere Antworten.

Mephist0

Mitglied
Hi,

ich bin noch ganz neu in Java und soll einen Fragebogen für eine Freundin erstellen.

Der Fragebogen soll z.B. Frage 7 deaktivieren, wenn bei Frage 6 eine bestimmte Antwort angeklickt wird. Da man das mit PHP nicht lösen kann, habe ich micht entschlossen auf Java zu übergreifen. Die Fragen bestehen aus Textboxen, Radiobuttons oder Checkboxen.

Jetzt natürlich meine Frage: Wie lässt sich das Managen?

Grüße, Mephisto.
 
Sicher, dass du auf dem richtigen Planeten gelandet bist? Da du schon PHP erwähnt hast, entsteht irgendwie der Verdacht, dass du JavaScript gemeint haben könntest...
 
Zuletzt bearbeitet von einem Moderator:
Eine Alternative zu JavaScript wäre ein JApplet.

Aber bevor wir hier voreilig urteilen: Stimmt es denn überhaupt, dass dieser Bogen
im Web laufen muss und nicht als normale Desktop-Anwendung?
 
Ääääääh 😱

Also hier nur Programmorientiertes programmieren, nicht webbasierend?

//EDIT: Jop, als Webanwendung.
 
Natürlich geht es hier auch um Webanwendungen (nicht nur um Applets wie von hdi angedeutet), solange die Sprache der Wahl Java ist und nicht etwa client seitiges Javascript.
Was genau hat dir den vorgeschwebt? Eine AJAX Lösung?
 
Sorry war unvollständig ausgedrückt. Ich denke aber nicht dass er hier irgendwelche
Servlets aufziehen will oder jsp's.
Ich denke schon eher, dass er nur will dass man's im Browser starten kann, also Applet
 
Hi,

sorry für die Verwirrung. Ich will definitiv einen Webbasierten Fragebogen erstellen, sprich kein Java. Ich kannte den Unterschied bissher nicht.

AJAX habe ich mir auch schon vorgestellt, aber gesagt gekriegt, das es das Maß eines Fragebogen übersteigt, weil: zu kompliziert.

Ich wende mich jetzt am besten an ein JavaScript Forum^^.

Danke trotzdem für die Hilfe. Wenn noch jemand eine Idee für JavaScript-Lösung hat, würde ich diese natürlich trotzdem gerne hören.

Grüße, Mephisto.
 
Wenn du rein Clientseitig entscheiden kannst, was ein- und ausgeblendet wird, brauchst du doch kein AJAX, ich könnte mir ganz gut vorstellen, dass auch so eine einfache enblend-ausblendmethode sehr nützlich sein kann.
 
So was in der Art (ungetestet):
HTML:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
function updateQuestionStatus()
{
  $("button2").disabled = !$("button1").checked;
  //$("button5").disabled = $("button4").checked;
  // ...
}
function $(name) {return document.getElementById(name);}
</script>
</head>
<body>
...
Macht es Sinn die nächste Frage zu stellen? <input type="checkbox" id="button1" onchange="updateQuestionStatus()"><br>
Warum haben Sie Frage 1 mit ja beantwortet? <input type="checkbox" id="button2" disabled="disabled" onchange="updateQuestionStatus()">
...
</body>
</html>
 
Zuletzt bearbeitet:
Omfg, sehen wir aus wie Javascript forum oder was? Anscheinend ja^^ :cry:
[HIGHLIGHT="xml"]<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title>irgendsoein toller fragebogen...</title>
<style type="text/css">
*{
background-color: #000000;
color: #FFFFFF;
}

div{
background-color: #553300;
margin: 10px;
padding: 10px;
width: 80%;
overflow: hidden;
}
</style>
<script type="text/javascript">
//<![CDATA[
function init(){
document.getElementById("myForm").cbHead.checked=false;
document.getElementById("myForm").cbEyes.checked=false;
document.getElementById("myForm").cbGoogle.checked=false;
initBlocks();
}

function initBlocks(){
document.getElementById("blockHead").style.display="block";
document.getElementById("blockEyes").style.display="none";
document.getElementById("blockGoogle").style.display="none";
document.getElementById("blockYouSuck").style.display="block";
document.getElementById("blockOk").style.display="none";
}

//eigentlich müsste man auf dem server schönes Modell für diesen Fragebogen erzeugen,
//dann topologische Sortierung der einzelnen Fragen durchführen
//die Adjazenzliste schön übersichtlich oben in irgendeine Datenstruktur a lá Map<Frage,List<Frage>> packen usw...

//aber da du eine JS Frage in einem Javaforum postest, wird dich die Hässlichkeit der folgenden Lösung hoffentlich nicht zu sehr ankotzen^^
//sehr gammelige Lösung, müsste sogar javascriptlern tränen in die Augen treiben...

function updateBlocks(){
initBlocks();
if(document.getElementById("myForm").cbHead.checked){
document.getElementById("blockEyes").style.display="block";
if(document.getElementById("myForm").cbEyes.checked){
document.getElementById("blockGoogle").style.display="block";
if(document.getElementById("myForm").cbGoogle.checked){
document.getElementById("blockYouSuck").style.display="none";
document.getElementById("blockOk").style.display="block";
}
}
}
}
// ]]>
</script>
</head>
<body onload="javascript:init()">
<form id="myForm" action="http://www.wherever.whatever.xyz"
method="post" enctype="multipart/form-data">

<div id="blockHead">
<label><input type="checkbox" name="cbHead" value="wtf1" onclick="javascript:updateBlocks()"/>Ich habe einen Kopf</label>
</div>

<div id="blockEyes">
<label><input type="checkbox" name="cbEyes" value="wtf2" onclick="javascript:updateBlocks()"/>Ich habe sogar Augen</label>
</div>

<div id="blockGoogle">
<label><input type="checkbox" name="cbGoogle" value="wtf3" onclick="javascript:updateBlocks()"/>Ich habe schon was von Google geh&ouml;rt</label>
</div>

<div id="blockYouSuck" style="background: red">
Trifft Irgendwas nicht zu? Tja, dann haben Sie m&auml;chtig Pech gehabt...
</div>

<div id="blockOk" style="background: green">
Trifft alles zu? Dann googlen Sie mal nach "jendryschik einf&uuml;hrung in xhtml und css"
</div>
</form>

<p>
<a href="http://validator.w3.org/check?uri=referer"><img
src="http://www.w3.org/Icons/valid-xhtml10"
alt="Valid XHTML 1.0 Strict" height="31" width="88" /></a>
</p>

</body>
</html>
[/HIGHLIGHT]
Im Prinzip "voll funktionsfähig" aber ich brauche wohl nicht zu sagen, dass es totaler schrott ist, ich seh diesen JS-Krempel heute zum zweiten Mal im Leben^^ 😀

edit: so, dieses Teil kommt nun auch durch den w3c-Validator, habe vorhin den <![CDATA[]]> Block vergessen.
 
Zuletzt bearbeitet von einem Moderator:
$("button2") hat soweit ich weiß den selben Effekt wie "document.getElementById('button2')"

Ob das JQuery genannt wird - ka, aber JavaScript ist trotzdem hässlich und ein "OOP-Ansatz" (hier können gar nicht genug Anführungsstriche stehen) wie Ext2 (benutzen wir in der Firma für die AJAX-basierten Oberflächen) macht das Ganze auch nicht schöner.
 
Ist ursprünglich prototype. Aber fast alle höheren JavaScript Frameworks bauen auf prototype auf 😀
 
Tja der Name ist halt Programm geworden, aber stimmt jetzt wo Ihr es erwähnt habt fällt mir auch ein, dass ich das in der Dokumentation zu Prototype das erste Mal gesehen hab.

Wie nennen die das nochmal? Annonyme-Funktion oder so, gell?
 
diese Dollarzeichen hab ich noch nie gesehen (o wunder^^), aus dem ersten code wurde zwar sofort klar, dass es anscheinend ein element über id ansprechen soll, aber irgendwie hat der js interpreter das nicht direkt geschluckt... Ich hab grad irgendwie meine schwierigkeit damit, zu verstehen, wohin separate javascript-pakete denn geladen werden sollen, wenn das ein clientseitiger script ist 😕 Muss man da einen zusäzlichen script-tag angeben, der auf irgendsoeine "prototype-package" zeigt oder wie läuft es normalerweise ab...?
 
Normalerweise ist dann da halt noch ein
HTML:
<script type="text/javascript" src="prototype.js" />

Der von mir oben gepostete Code sollte aber eigentlich einfach so lauffähig sein. Hat zumindest beim Testen in Opera funktioniert 😉

Edit: ach ja, ich verschiebs mal in den Javascript-bereich 😉
 
Zuletzt bearbeitet:
Normalerweise ist dann da halt noch ein
HTML:
<script type="text/javascript" src="prototype.js" />
wunderbar, nach dem prinzip der geringsten überraschung

Der von mir oben gepostete Code sollte aber eigentlich einfach so lauffähig sein. Hat zumindest beim Testen in Opera funktioniert 😉
ja, sorry, habe anfangs dieses
Code:
function $(name) {return document.getElementById(name);}
übersehen, war es denn überhaupt da? :grin:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben