Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Antworten in Reihenfolge bringen bzw. "Mehrfach kurze Texte" mit "Reihenfolge"

More
3 years 5 months ago - 3 years 5 months ago #208288 by Heloo
Hallo Community,

ich arbeite mit LS Version 3.23.3+200909 und möchte gerne 2 Fragetypen (Mehrfach kurze Texte und Reihenfolge) miteinander kombinieren.

Frage 1 (Mehrfach kurze Texte):
Bitte nennen Sie Ihre 5 Lieblingseissorten.

Frage 2 (Reihenfolge):
Bitte bringen Sie Ihre genannten Eissorten in eine absteigende Reihenfolge

Meine Frage:
Wie kann ich die Antworten aus Frage 1 an Frage 2 zur Sortierung übergeben?

Ich meine es schon einmal irgendwo gesehen zu haben und das man es mit Java-Script in der zweiten Frage irgendwie hinbekommt und das zwischen den beiden Fragen der Browser einmal aktualisieren muss (Format: Frage für Frage). Leider war meine erneute Suche erfolglos.

Ich bin für jede Hilfe dankbar,

Grüße
Last edit: 3 years 5 months ago by Heloo.
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 5 months ago #208294 by Joffm
Hallo, Heloo

Ich meine es schon einmal irgendwo gesehen zu haben und das man es mit Java-Script in der zweiten Frage irgendwie hinbekommt und das zwischen den beiden Fragen der Browser einmal aktualisieren muss (Format: Frage für Frage).

Leider war meine erneute Suche erfolglos.

Gott sei Dank.
Die Sache mit javascript ist nämlich Unsinn.
Besser, Du liest einmal das Kapitel über Fragetypen im Handbuch.
manual.limesurvey.org/Question_types
Dort steht dann bei der Ranking-Frage - auch bei anderen:
manual.limesurvey.org/Question_type_-_Ranking
Unter anderem siehst Du Folgendes:

Array filter (array_filter)

Description

The Array filter setting allows you to use any multiple choice question to select or set which responses are displayed in a subsequent list, array or multiple choice question.


Und jetzt kommt das Entscheidende:


Und damit hast Du alles:
Benutze dieselben Codes in der Mehrfachnennungsfrage (Q1) und der Rankingfrage (Q2).
Also belasse es NICHT bei den default-Codes "SQ001", "SQ002",... bzw. "A1", "A2",...
Dann geht es "in die Hose".
Benenne beide identisch, einfach "1", "2",...
Und setze in der Rankingfrage den Matrixfilter auf die Mehrfachnennungsfrage, also hier Q1.





Dies muss auch nicht auf zwei verschiedenen Seiten sein - obwohl dies natürlich die bessere Lösung ist.


Joffm

Und vergiss nicht den Code "Keine davon", bei dem Die Rangreihe natürlich nicht angezeigt wird, und wohl auch, wenn nur eine Eissorte ausgewählt wurde.

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The following user(s) said Thank You: Heloo
The topic has been locked.
More
3 years 5 months ago #208309 by Heloo
Hallo Joffm,

vielen Dank für deine Antwort, ich habe es gerade nachgebaut und auf jedenfall etwas neues dabei gelernt.

Es ist allerdings nicht genau das, was ich meinte. In deinem Beispiel , wenn ich es richtig verstanden habe, ist:

Frage 1: Multiple Choice Mehrfachantwort
1. Eis1
2. Eis2
3. Eis3
usw.

Frage 2: Reihenfolge
1. Eis1
2. Eis2
3. Eis3
usw. (gleiche Antworten wie bei Frage 1 und gleich Codierung)

Durch den Matrixfilter werden dann bei der Reihenfolge-Frage nur die Möglichkeiten angezeigt, wo die Checkbox angeklickt ist, der Rest ist je nach Einstellung entweder versteckt oder deaktiviert. Ist ein sehr cooles Feature, dass (da ich jetzt weiß wie^^) bestimmt auch mal anwenden werde. Allerdings müssen die Namen in Frage 1 fest vorgegeben werden.

Es besteht bei mir das Problem, dass ich nicht alle 5 Eissorten fest vorgeben möchte, sondern diese erst in einer "Freitext Mehrfachfrage" benennen möchte, um sie anschließend in ein Ranking zu bringen.
(Spricht: Die Namen sollen eingetippt werden (z.B. ein exotisches Curry-Wurst-Eis, auf das die wenigsten vermutlich vorher kommen) und die Eissorten sollen dann in der Reihenfolge-Frage in den Balken auftauchen)

Während ich diese Antwort geschrieben habe, bin ich allerdings dann auch auf den Rest der Lösung gekommen.
Einfach in der Reihenfolge-Frage die Variablen {Q1_1}, {Q1_2}, usw. verwenden.

Vielen Dank nochmals für deine Hilfe!

Gruß
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 5 months ago #208317 by Joffm
Sorry,
das liegt natürlich am hypothesenbildenden Lesen.
Ich habe es einfach nicht gesehen.

Genau so geht es.
Wobei Du trotzdem an Matrixfilter lassen solltest.
Wenn Du ansonsten beide Fragen auf einer Seite darstellst, sieht das Ranking zunächst so aus.

Das ist einfach unschön.
Und ich kann mir nicht vorstellen, dass Du die Leute zwingen willst, sich 5 Eissorten aus den Fingern zu saugen, wenn sie nur 4 kennen.

Und dann wäre - wenn Du schon coole Features möchtest - eine dieser Optionen ganz nett.
1. Simpel
(das nächste Eingabefeld wird erst dann angezeigt, wenn das vorherige gefüllt ist - vermeidet auch Eingaben in das erste, dritte und fünfte Feld, Rest leer)
Dazu einfach in die Teilfragenrelevanz des zweiten Feldes !is_empty(Q1_1), des dritten Feldes !is_empty(Q1_2) - klar, nur dann zeigen, wenn das vorherige Feld nicht leer ist.




2. Mit etwas mehr spielerischem Anreiz

Dafür ist dann ein kleines javascript snippt nötig.

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The following user(s) said Thank You: Heloo
The topic has been locked.
More
3 years 5 months ago #208320 by Heloo

Joffm wrote: Und dann wäre - wenn Du schon coole Features möchtest - eine dieser Optionen ganz nett.

Immer her damit :)

Die Option "1-Simpel" habe ich eingebaut, da es sich bei der späteren Umfrage nicht um Eissorten handelt und vermutlich bis zu 10 Antworten möglich sein werden, macht diese Funktion die Freitextfrage zum Einstieg doch deutlich kompakter und schöner.

Wenn du mir das Java-Script-Snippet zur Verfügung stellen möchstest, dann würde ich es mal versuchen.

Danke und Gruß
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 5 months ago #208321 by Joffm
Na, dann spiel mal damit.
Code:
<script type="text/javascript" charset="utf-8">
  $(document).on('ready pjax:complete',function() {
 
    // A function to add or remove rows of a multiple-short-text question
    function varLengthArray(qID) {
 
 
      // The HTML content of the Add/Remove elements - modify as you wish
      var addContent = '[+] Weitere Sorte';
      var removeContent = '[-] Lösche Sorte';
 
      // Insert the buttons
      $('#question'+qID+' .subquestion-list').append('<div id="addButton'+qID+'" class="control-button btn btn-primary">'+addContent+'</div><div id="removeButton'+qID+'" class="control-button btn btn-primary">'+removeContent+'</div>');
 
      // Style the elements - you can modify here if you wish
      $('#question'+qID+' .control-button').css({
        'margin':'10px 0 0 10px',
        'padding':'1px',
        'text-align':'center',
        'width':'auto',
        'cursor':'pointer',
        'float':'left',
                'margin-bottom':'10px'
      });
 
      // Initially hide the Remove element
      $( 'div#removeButton'+qID ).hide();
 
      // Call the functions below when clicked
      $( 'div#addButton'+qID ).click(function (event) {
        addRow(qID);
      });
      $( 'div#removeButton'+qID ).click(function (event) {
        removeRow(qID);
      });
 
      // Function to add a row, also shows the Remove element and hides the
      function addRow(qID) {
        $('#question'+qID+' .answer-item:hidden:first').show();
        $('div#removeButton'+qID).show();
        if ($('#question'+qID+' .answer-item:visible').length == $('#question'+qID+' .answer-item').length)  {
          $('div#addButton'+qID).hide();
        }
      }
 
      // Function to remove a row and clear the input value
      function removeRow(qID) {
        $('#question'+qID+' .answer-item:visible:last').hide();
        $('#question'+qID+' .answer-item:hidden input[type="text"]').each(function(i) {
          $(this).val('').trigger('keyup');
        });
        $( 'div#addButton'+qID ).show();
        if ($('#question'+qID+' .answer-item:visible').length == 1)  {
          $('div#removeButton'+qID).hide();
        }
      }
 
      // Just some initialization stuff
      // Initially hide all except first row or any rows with populated inputs
      $('#question'+qID+' .answer-item input[type="text"]:not(:first)').each(function(i) {
        if($.trim($(this).val()) == '') {
          $(this).closest('.answer-item').hide();
        }
        if ($('#question'+qID+' .answer-item:visible').length > 1)  {
    //      $('div#removeButton'+qID).show();
        }
      });
    }
 
    // Call the function with a question ID
    varLengthArray({QID});
  });
 
</script>

In "Style the elements" kannst Du ja beliebig rummauscheln.

Mit den allerbesten Grüßen
Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
Moderators: Joffm

Lime-years ahead

Online-surveys for every purse and purpose