Hallo, Sarina,
hier Deine Umfrage mit der "neuen" Matrix.
Was ist alles darin?
Zunächst die Darstellung als Matrix.
Dann die Eingabemaske.
Linksbündige Darstellung der Items
Zentrierung der Radio-Buttons.
Unterschiedliche Spaltenbreiten, falls gewünscht.
Check, dass maximal 3-stellige Zahlen eingegeben werden können.
Da durch den hinzugefügten Text die Eingabemaske ja ziemlich vergewaltigt wird, wird in eqQ2 dann dieser entfernt, damit in der Datenbank nur der Wert steht.
Was fehlt?
a. Check, ob ein Teilnehmer einen Wert einträgt, dann aber "noch nie" anklickt.
b. Check, ob ein Teilnehmer keinen Wert einträgt, dann aber "Tag", "Woche", anklickt.
a. Könnte man z.B. abfangen, indem in der Gleichungsfrage eqQ2 noch hinzugefügt wird, dass der Wert in Q2a_SQ001 geleert wird wenn Q2_SQ001==9 (9="noch nie")
b. Das wäre noch ein Validierungspunkt, ähnlich wie der der dreistelligen Zahlen.
Was geht nicht?
Logischerweise können die Items nun nicht in zufälliger Reihenfolge angezeigt werden, da die Textfrage, die ja mittels des scriptes eingefügt wird, in der normalen Reihenfolge vorliegt.
Wichtige Stellen im script
Die Breite der eingefügten Spalte:
Code:
$('.inserted-column-label', qArray).css('width','15%');
Hier das Textfeld eingefügt und gleichzeitig die Maske definiert.
"mal pro" muss dann ins Englische übersetzt werden.
Code:
$('input[type="text"]', this).appendTo($('tr.answers-list:eq('+i+') .text-item', qArray)).mask('##0 mal pro ...', {
reverse: true,
placeholder: "__ mal pro ..."
});
Und hier wird die Spaltenbreite der einzelnen Spalten bestimmt (sollte zusammen 100% ergeben)
Code:
<style type="text/css">
.custom-array table.subquestion-list col {
width: auto !important;
}
.custom-array table.subquestion-list thead .column-0 { width: 50%; }
.custom-array table.subquestion-list thead .column-1 { width: 15%; }
.custom-array table.subquestion-list thead .column-2 { width: 6%; }
.custom-array table.subquestion-list thead .column-3 { width: 6%; }
.custom-array table.subquestion-list thead .column-4 { width: 6%; }
.custom-array table.subquestion-list thead .column-5 { width: 6%; }
.custom-array table.subquestion-list thead .column-6 { width: 11%; }
Okay, jetzt etwas zur den anderen Dingen.
Deine Idee in "Hauf" mit der Mehrfachnennung ist im Grunde recht gut.
Allerdings zielte das Beispiel ja darauf, dass die Texteingabe eine weitere Option zusätzlich zu den anzucheckenden ist.
Und dann gab es die zwei exklusiven Option "Gar nicht" und "keine Angabe".
Dann muss ein evtl. eingegebener Text natürlich gelöscht werden.
Die entscheidende Stelle im script ist auch leicht zu finden
Code:
$('.exclusive-item input:checkbox', thisQuestion).on('change', function(e) {
if($(this).is(':checked')) {
var thisItem = $(this).closest('.answer-item');
$(this).closest('tr.subquestion-list').find('.answer-item').not(thisItem).find('input:checkbox').prop('checked', false);
$(this).closest('tr.subquestion-list').find('input:text').val('');
}
});
Also: Wenn ein exclusives Item gecheckt ist, dann wird der Wert (val) des Textes auf "leer" gesetzt.
Wenn Du diese Zeile entfernst, funktioniert auch Dein "Hauf".
Jedenfalls fast. Denn, wenn "Noch nie" gewählt wird, sollte der Text ja geleert werden.
D.h. Du musst diesem Item eine andere Klasse geben, z.B. "exclusive-item2" und dann am Schluss den Text leeren, wenn dieses Item gewählt wurde.
Habe ich auch einmal gemacht (ich bin ja freundlich
Jetzt aber zur ersten Gruppe
F22: Hier wolltest Du wohl des Beispiel der Lückentexte einbauen. Halte ich auch für eine interessante Idee.
Diese Frage "von - bis" lässt sich doch gut mit Drop-Downs lösen.
Es kommt ja nicht auf die Minute an.
Könnte so aussehen.
Ist auch drin.
Aber was ist denn dieses?
var thisSelect = $('#question
{19776} input[id^="answer"]:eq(0)');
Dort stand sicher einmal $('#question
{QID}
Wie Du hoffentlich jetzt weißt, sind dies LimeSurvey-spezifische Platzhalter, die immer durch den aktuellen Wert ersetzt werden.
{SID} : SurveyID
{GID} : GruppenID
{QID} : FragenID
{SAVEDID} : ID des Datensatzes in der Antworttabelle
{EXPIRY} : Enddatum der Umfrage (falls angegeben)
und andere.
Das heißt, in scripten wird dies
NICHT geändert.
Wenn schon hättest Du $('#question19776 schreiben müssen.
Problem ist ja: Wenn Du die Umfrage kopierst oder exportierst und wieder importierst, werden diese Werte - wenn sie hart hineingeschrieben werden - nicht angepasst.
Und als Letztes:
Du schriebst, dass es einen mixed mode geben soll (paper pencil und online)
Nun, dass sind nun zwei unterschiedliche Methoden und für jede sollte das dafür geeignete Design gewählt werden.
Einer meiner Kunden schickt ebenfalls immer noch Papier, gleichzeitig wird aber auch die Beantwortung online angeboten.
Und das sind zwei Fragebögen mit ganz unterschiedlichem Design, eben an die Arbeitsweise beim Beantworten angepasst
Man kann einen paper pencil-Bogen nicht sklavisch nach online transferieren.
Eher würde es noch umgekehrt gehen.
Bei einem Papierbogen gibt es deutlich mehr Erklärungsbedarf (und man weiß "Papier ist geduldig"); trotzdem wird der Teilnehmer Gott weiß was ankreuzen und hinschreiben.
Im Gegensatz dazu sollte ein Online-Fragebogen mit kurzen Texten auskommen. (Eine Skala, die angezeigt wird, muss nicht im Fragetext noch einmal erklärt werden.) Hier wird ja zusätzlich durch Validierung viel "Unsinn" abgefangen.
Und eben das Prinzip "Eine Frage pro Seite"
Und das Programmierprinzip lautet ja "mobile first".
D.h. Du entwickelst den Fragebogen für ein mobiles Endgerät. Dabei siehst Du bereits, bei welchen Ideen, eine Frage darzustellen, es Probleme gibt.
Verschiebe einmal einen Slider auf einem smartphone und ähnliches.
Zum Fragebogen-Design dies als zusätzliche Anregung (der Autor war auch lange Zeit hier aktiv und hat viele Ideen eingebracht)
Jetzt mach was draus
Viel Erfolg
Joffm