0 votes
in SoSci Survey (dt.) by s196976 (145 points)

Hallo :)

Ich möchte folgende Tabelle mithilfe einer Kombinierten Frage erstellen:

In den ersten sieben Spalten stehen festgelegte Daten. In der letzten Spalte soll der Benutzer Einen Wert eintragen können und unten soll die Summe dieser eingetragenen Werte angezeigt werden.

Ich benutzte deshalb nicht einfach ein Tabellenbild mit frei platzierbaren Eingabefeldern, weil wir die Reihenfolge der Zeilen im Fragebogen randomisieren wollen und es sehr praktisch wäre wenn dazu :"Eine Zeile" = "Eine kombinierte Frage mit Wert des Eingabefelds als Variable", damit man sie einfach umstellen kann, aber die Zuordnung glech bleibt.

Jetzt habe ich schon ein paar Threads mit ähnlichen Fragen gesehen und es wird immer auf Kombinierte Fragen verwiesen. Leider werde ich aus der Erklärung noch nicht wirklich schlau. Ich habe folgende Fragen:

  1. Welche Fragen muss ich hier am besten kombinieren?
  2. Wie setzte ich das Eingabefeld in die letzte Spalte, sodass es mit der jeweiligen Zeile verknüpft ist, um es randomisieren zu können?
  3. Wie setze ich den Summenrechner unter die letzte Spalte/Zeile?
  4. Wie kann ich optisch die Trennstriche der Tabelle in die kombinierte Frage einfügen?

Danke falls das jemand beantworten kann :D

2 Answers

+1 vote
by SoSci Survey (308k points)

Ich befürchte, die Funktion kombinierter Fragen wird hierfür nicht geeignet sein. Es ist nälich bisher kein Fragetyp vorgesehen, welcher nur eine Ausgabe erzeugt (aber kein Eingabefeld oder zumindest die Variablen dazu).

Stattdessen würde ich bei der Lösung bleiben, die Sie schon im Auge hatten, nämlich den frei platzierten Eingabefeldern. Um die Reihenfolge der Zeilen zu rotieren, bauen Sie das HTML für die Tabelle einfach dynamisch mit einer FOR-Schleife auf.

Die Werte könnten Sie z.B. vorab in einem Array definieren, z.B.

$werte = [
    1 => ['LLC Limited', 1000, 13, 1130, ...],
    2 => ['GLD Corp.', 1000, -13, 870, ...],
    ...
];

$html = '<table cellpadding="4">';

// Header
$html.= '<tr><th>Aktien</th><th>Kaufpreis</th>...</tr>';

// Rotation via Zufallsgenerator RG01
for (valueList('RG01') as $rowID) {
  $data = $werte[$rowID];
  $html.= '<tr><td>'.$data[0].'</td>'.
    '<td>'.$data[1].'</td>...'.
    '<td>input:'.id('AB01', $rowID).'</td></tr>';
}

$html.= '</table>';
html($html);

So, oder zumindest do ähnlich ;) Für die bunte Ausgabe der Prozente würden Sie wahrscheinlich noch eine separate Funktion definieren, die je nach Vorzeichen den HTML-Code mit Formatierung erstellt. Gleiches gilt für die Preise, die mit Punkt und Euro-Zeichen formatiert werden sollen.

Wie setze ich den Summenrechner unter die letzte Spalte/Zeile?

Ich suche Ihnen das passende JavaScript heraus, wenn der Rest funktioniert.

by s196976 (145 points)
Ok ich habe jetzt in meiner Tabelle mittels `%input:PF01_01%` etc. in der letzten Zeile die freien Eingabefelder platziert. Jetzt würde ich normalerweise mit einem code wie :

<script type="text/javascript" >
var TotalSum = 0.0;
$('#Aktientab td.eingabe').each(function(){
       TotalSum += parseFloat($(this).text());
});
$("#sumall").text(TotalSum);
</script>

aus den einzelnen Feldern die Werte zusammenrechnen. Das geht nun natürlich nicht da html nicht direkt auf die eingegebenen Zahlenwerte der freien Felder zugreifen kann, oder ? wie würde das nun funktionieren ? :)

Achja und noch wichtig ist, dass sich der Wert live verändert, während die Werte eingegeben werden (Am Ende soll der Proband auf 5000 kommen)
by s196976 (145 points)
ich  habe bis jetzt die soscisurveyanleitung zum Wörter zusammenzählen gefunden. Das hat funktioniert. Davon kann die Lösung meines Problems ja nicht weit entfernt sein. Leider habe ich bisher nicht die Funktion gefunden, um den Wert einer Eingabe als Zahl auszugeben. Getvalue() scheint ja nur zu funktionieren wenn der wert schon auf dem sosci-server geladen ist, eignet sich also nicht für einen "live"-counter
by SoSci Survey (308k points)
Mit JavaScript waren Sie schon nah' dran. Für die Ausgabe brauchen Sie kein Eingabefeld, sondern ein benanntes HTML-Element, das kann z.B. ein

<span id="ausgabe">---</span>

sein. Dort können Sie einfach per JavaScript Werte reinschreiben, z.B.

document.getElementById("ausgabe").innerHTML = "123";

Allerdings erwartet die SoSci-interne Funktion ein Eingabefeld, aber nehmen wir doch besser:

<input id="ausgabe" readonly type="text">

Anschließend können Sie aber direkt die JavaScript-Funktion nutzen, die SoSci Survey schon mitbringt.

S2QstText.textSumInstance.attach("ausgabe", 100, [
  "TX01_01", "TX01_02", "TX01_03"
], 0, "");

"ausgabe" ist die HTML-ID des Texteingabefelds, und danach kommen in eckigen Klammern (also als Array) die IDs der Eingabefelder, die summiert werden sollen. Die 100 steht nur für die erwartete Summe, die 0 für die Dezimalstellen und der leere String am Ende könnte als Fehlermeldung genutzt werden, aber das benötigen Sie ja nicht.
by s196976 (145 points)
Also ich habe jetzt n bisschen rumprobiert. Leider fehlt mir ein bisschen das grundlegende Verständnis für Javascript/Soscisurvey, sodass es leider nicht funktioniert. Also nochmal zusammengefasst :

1. Ich erstelle einen Textbaustein mit dem genauen Inhalt:

<script type="text/javascript">

input id="ausgabe" readonly type="text"

var sum = S2QstText.textSumInstance.attach("ausgabe", 100, [
  "PF01_01", "PF01_02", "PF01_03" "PF01_04", "PF01_05", "PF01_06", "PF01_07", "PF01_08",
], 0, ""); ;


document.getElementById("ausgabe").innerHTML = sum
 
</script>

Frage: Das scheint nicht zu funktionieren. Wahrscheinlich habe ich die interne Logik nicht richtig beachtet. Kann ich "S2Qs...usw." überhaubt als Variable definieren?

2. Ich erstelle bei "Fragebogen zusammenführen" einen html-code-element:

<span id="ausgabe">---</span>

das ich dorthin platziere, wo ich die Ausgabe haben will. Das hat mit dem einfachen : document.getElementById("ausgabe").innerHTML = "123", schon geklappt, weshalb ich angenommen habe, ich müsse nur noch eine variable definieren, die meine Werte zusammenzählt und die als inhalt der "ausgabe" eintragen.

3. Brauche ich keinen php-code mehr ?

Vielen Dank für ihre Antworten!
by SoSci Survey (308k points)
Das <input> ist HTML-Code, der muss in die Tabelle. Statt dem <span>

Und das
document.getElementById("ausgabe").innerHTML = sum
am Ende war nur exemplarisch, das bitte weglassen.
by s196976 (145 points)
edited by s196976
Entschuldigung, das verwirrt mich. Laut ihnen soll ich also ein javascript erstellen dessen einziger inhalt :

<script type="text/javascript">

S2QstText.textSumInstance.attach("ausgabe", 100, [
  "PF01_01", "PF01_02", "PF01_03" "PF01_04", "PF01_05", "PF01_06", "PF01_07", "PF01_08",
], 0, ""); ;

</script>

(ich nehme mal an dieser code zählt den inhalt meiner Zellen zusammen und verknüpft dann das ergebnis mit dem "ausgabe"-Element. Braucht es dafür keine Art von schleife, sodass der Inhalt bei jedem neuen Eintrag upgedated wird?)

ist und dann in meiner html-tabelle: input id="ausgabe" readonly type="text", an passender Stelle einfügen ?

Wenn ich das so mache wird zwar bei meiner Summe ein Feld erstellt, in diesem steht aber kein inhalt und es passiert auch nichts wenn ich etwas in die eingabefelder eingebe.

Wahrscheinlich sind das nur ein paar Zeilen, die ich hier ergänzen müsste. Wie gesagt soll sich der Wert " live" während der Eingabe verändern
by s196976 (145 points)
edited by s196976
Ah jetzt hat es funktioniert ! Wie so oft war der Fehler am Ende ein fehlendes Komma im Code. Vielen Dank für ihre Hilfe :)

Eine kleine Sache vielleicht noch : Die 100 gibt ja den erwarteten Wert an. Diesen kann man aber übersteigen. Gibt es eine kleine Möglichkeit die Summe auf 5000 zu begrenzen und dann eine Warnung einblenden zu lassen "Sie übersteigen den empfohlenen Wert" ?

Danke noch einmal
by SoSci Survey (308k points)
> Braucht es dafür keine Art von schleife, sodass der Inhalt bei jedem neuen Eintrag upgedated wird?

SoSci Survey hat für die offene Texteingabe ja so eine Funktion, welche die Werte zusammenzählt und die Summe ausgibt. Warum sollten Sie diese selbst programmieren, wenn es sie schon fertig gibt? Im Hintergrund sind da reichlich Schleifen ;)

> Ah jetzt hat es funktioniert !

Sehr gut!

> Die 100 gibt ja den erwarteten Wert an. Diesen kann man aber übersteigen. Gibt es eine kleine Möglichkeit die Summe auf 5000 zu begrenzen und dann eine Warnung einblenden zu lassen "Sie übersteigen den empfohlenen Wert" ?

Natürlich. Fügen sie die Warnung als HTML-Element auf der Seite ein. Mit dem CSS "position: absolute" können Sie die Warnung über die anderen Inhalte legen.

Dann blenden Sie die Warnung mittels "display: none" aus, und überwachen das Summenfeld, ob dort ein Wert > 5000 steht. Das können sie z.B. durch einen Timer (window.setInterval) machen. Wenn der Wert drüber ist, zeigen Sie die Warnung, wenn er darunter ist, blenden Sie sie wieder aus.
0 votes
by s196976 (145 points)

Danke für die absurd schnelle Antwort :)

Eine Html-Tabelle hatte ich dazu sogar schon erstellt. Bisher war dabei mein größtes Problem, dass ich die Randomiesierung bisher nicht hinbekommen habe. Aber vielleicht bekomme ich das ja jetzt hin.

<style type="text/css">
.tg  {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;}
.tg .tg-lkh3{background-color:#9aff99}
.tg .tg-i0og{color:#000000}
.tg .tg-usb5{color:#009901}
.tg .tg-fqpo{background-color:#cbcefb}
.tg .tg-w57h{font-family:"Palatino Linotype", "Book Antiqua", Palatino, serif !important;}
.tg .tg-6hwe{font-size:12px;font-family:"Arial Black", Gadget, sans-serif !important;;background-color:#ffffff}
.tg .tg-pjj5{font-family:"Arial Black", Gadget, sans-serif !important;}
.tg .tg-73ef{font-size:12px;font-family:"Arial Black", Gadget, sans-serif !important;}
.tg .tg-hla4{background-color:#cdffff;color:#000000}
.tg .tg-0ki0{color:#9a0000}
.tg .tg-ek65{background-color:#ffffff;color:#000000}
</style>
<table class="tg" style="table-layout: fixed; width: 922px">
<colgroup>
<col style="width: 141.066667px">
<col style="width: 84.066667px">
<col style="width: 127.066667px">
<col style="width: 114.066667px">
<col style="width: 129.066667px">
<col style="width: 147.066667px">
<col style="width: 109.066667px">
<col style="width: 70.066667px">
</colgroup>
  <tr>
    <th class="tg-6hwe">Aktien</th>
    <th class="tg-pjj5">Kaufpreis</th>
    <th class="tg-73ef"><br>Wertentwicklung<br><br></th>
    <th class="tg-73ef"><br>Aktueller Preis<br>(verfügbares Kapital)<br></th>
    <th class="tg-73ef">Gründungsjahr<br></th>
    <th class="tg-73ef">Marktkapitalisierung</th>
    <th class="tg-73ef">Nachhaltigkeit</th>
    <th class="tg-hla4">Verkaufte Anteile<br></th>
  </tr>
  <tr>
    <td class="tg-w57h">LLC Limited</td>
    <td class="tg-031e">1000</td>
    <td class="tg-usb5">&nbsp;13%</td>
    <td class="tg-031e">1.130 €<br></td>
    <td class="tg-031e">1972<br></td>
    <td class="tg-031e">2,24 Mrd €</td>
    <td class="tg-i0og">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AAA<br></td>
    <td class="tg-fqpo"><br></td>
  </tr>
  <tr>
    <td class="tg-w57h">GLD Corp</td>
    <td class="tg-031e">1000</td>
    <td class="tg-0ki0">-13%</td>
    <td class="tg-031e">&nbsp;&nbsp; 870 €<br></td>
    <td class="tg-031e">1970<br></td>
    <td class="tg-031e">2,30 Mrd €</td>
    <td class="tg-i0og">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AAA</td>
    <td class="tg-fqpo"></td>
  </tr>
  <tr>
    <td class="tg-w57h">Allison Enterprises</td>
    <td class="tg-031e">1000</td>
    <td class="tg-usb5">12%</td>
    <td class="tg-031e">1.120 €<br></td>
    <td class="tg-031e">1972<br></td>
    <td class="tg-031e">2,19 Mrd €</td>
    <td class="tg-i0og">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AA<br></td>
    <td class="tg-fqpo"></td>
  </tr>
  <tr>
    <td class="tg-w57h"><br>Viewpoint Inc.</td>
    <td class="tg-031e">1000</td>
    <td class="tg-0ki0">-12%</td>
    <td class="tg-031e">&nbsp;&nbsp; 880 €<br></td>
    <td class="tg-031e">1975<br></td>
    <td class="tg-031e">2,20 Mrd €</td>
    <td class="tg-ek65">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AA<br></td>
    <td class="tg-fqpo"></td>
  </tr>
  <tr>
    <td class="tg-w57h">Dotwork</td>
    <td class="tg-031e">1000</td>
    <td class="tg-usb5">12%</td>
    <td class="tg-031e">1.120 €</td>
    <td class="tg-031e">1974</td>
    <td class="tg-031e">2,25 Mrd €</td>
    <td class="tg-ek65">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CCC<br></td>
    <td class="tg-fqpo"></td>
  </tr>
  <tr>
    <td class="tg-w57h">Wheaton Enterprises<br></td>
    <td class="tg-031e">1000</td>
    <td class="tg-0ki0">-13%</td>
    <td class="tg-031e">&nbsp;&nbsp; 870 €</td>
    <td class="tg-031e">1973</td>
    <td class="tg-031e">2,26 Mrd €</td>
    <td class="tg-i0og">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CCC</td>
    <td class="tg-fqpo"></td>
  </tr>
  <tr>
    <td class="tg-w57h">Extracom</td>
    <td class="tg-031e">1000</td>
    <td class="tg-usb5">13%</td>
    <td class="tg-031e">1.130 €</td>
    <td class="tg-031e">1970</td>
    <td class="tg-031e">2,31 Mrd €</td>
    <td class="tg-i0og">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CC<br></td>
    <td class="tg-fqpo"></td>
  </tr>
  <tr>
    <td class="tg-w57h">M&amp;P</td>
    <td class="tg-031e">1000</td>
    <td class="tg-0ki0">-12%</td>
    <td class="tg-031e"><br>&nbsp;&nbsp; 880 €</td>
    <td class="tg-031e">1970<br></td>
    <td class="tg-031e">2,21 Mrd €</td>
    <td class="tg-i0og">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CC<br></td>
    <td class="tg-fqpo"></td>
  </tr>
  <tr>
    <td class="tg-031e" colspan="6">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <br></td>
    <td class="tg-031e">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Summe:<br></td>
    <td class="tg-lkh3"></td>
  </tr>
</table>

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...