Welcome to the LimeSurvey Community Forum

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

Answers random order - partial randomization & keeping distinct answers fixed

  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
8 years 3 months ago #129712 by tpartner
If, for example, the sub-question codes of the last 3 items are 97, 98 and 99, you can insert a script like this:

Code:
<script type="text/javascript" charset="utf-8">    
  $(document).ready(function(){ 
 
    // Move sub-question codes 97, 98, 99 to the end of the array
    $('#question{QID} table.subquestions-list tbody').append($('#question{QID} table.subquestions-list tr[id$="X{QID}97"]'))
    .append($('#question{QID} table.subquestions-list tr[id$="X{QID}98"]'))
    .append($('#question{QID} table.subquestions-list tr[id$="X{QID}99"]'));
 
    // Fix up array row background colours
    $('#question{QID} table.subquestions-list tbody > tr').each(function(i){
      $(this).removeClass('array1 array2').addClass('array'+(2-(i%2)));
    });
    });
</script>

Sample survey attached:

File Attachment:

File Name: limesurvey...9847.lss
File Size:19 KB

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The following user(s) said Thank You: delarammahdaviii
The topic has been locked.
  • delarammahdaviii
  • delarammahdaviii's Avatar
  • Offline
  • Senior Member
  • Senior Member
More
8 years 3 months ago #129713 by delarammahdaviii
The topic has been locked.
More
8 years 2 months ago - 8 years 2 months ago #130977 by flannery
Attached is an updated version for 2.50+. This will keep subquestions 12 and 13 at the bottom of the list for a multiple choice question using the newspaper theme.
Code:
<script type="text/javascript" charset="utf-8">    
  $(document).ready(function(){ 
 
    // Move sub-question codes 12, 13 to the end of the array
    $('#question{QID} .subquestions-list ').append($('#question{QID} .subquestions-list div[id$="X{QID}12"]').parent() ).append($('#question{QID} .subquestions-list div[id$="X{QID}13"]').parent() );
 
    });
</script>
Last edit: 8 years 2 months ago by flannery.
The topic has been locked.
More
8 years 2 months ago #131395 by rasheed
I tested this with List (radio) question and it didn't work. Not sure if the script is compatible with 2.05 am using.

Thank you
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
8 years 2 months ago #131399 by tpartner
Tested what? There are several scripts in this thread. What are you trying to do and what script have you used?

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The topic has been locked.
More
8 years 2 months ago #131401 by rasheed
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
8 years 2 months ago #131405 by tpartner
I find that the survey supplied in the workaround works in 2.05. Have you tried with the default template? Do you have any JavaScript errors?

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The topic has been locked.
More
8 years 2 months ago #131407 by rasheed
I think i found the reason. It doesn't actually work when answers are displayed in columns... :/
The topic has been locked.
More
8 years 2 months ago #131453 by rasheed
Is there any solution to make work with columns please ?

Thank you !
The topic has been locked.
More
8 years 1 month ago #133153 by kapelas
Regarding rasheed 's link in limesurvey, I would like to submit a small conversion to the script for partially randomize question in Array AND having the Repeat headers activated.
So, regarding the exact link
manual.limesurvey.org/Workarounds:_Manip...rs_-_Array_questions

If you add the <tag>:last</tag>, to point to the last descendant of the tbody, you add the question ONLY on the last tbody section of the repeated sections, otherwise the fixed sub-questions is added on every tbody section.

<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
...
// Move the "fixed" row to the end
$('table.subquestions-list tbody:last', thisQuestion).append($('tr[id$="X'+q1ID+fixedCode+'"]'));
...
</script>
The following user(s) said Thank You: tpartner
The topic has been locked.
More
7 years 11 months ago #136519 by Blume
Hi,

is there also a solution for multiple choice/option questions?
I want to randomize answer options of a multiple choice/option question, but keep the last input answer and other fix. I work with Version 2.06.

My example:
Answer A
Answer B
Answer C
Answer D
Other (advance settings)

--> Answer D and "other" should be fixed and not randomized.
The topic has been locked.
More
7 years 2 months ago #148503 by michaelve
I wanted to realize more or less the same goal, but instead of having a list, I wanted to have an array type question with partial randomization. By modifying the code of tpartner I managed to realize this. Note that the CSS has to be tweaked as well for the odd and even rows in the table, hence the second loop.

Code:
<script type="text/javascript" charset="utf-8">  
  $(document).ready(function() {
 
    // The number of answers to be fixed at the end of the list
    var fixedAnswers = 2;
 
    // Identify this question
    var qID = {QID}; 
 
    // Find the number of answers
    var ansCount = $('#question'+qID+' .answers-list').length;
    //alert(ansCount);
    // Place the last n answers created at the end of the list
    var fixedIndex = fixedAnswers - 1;
    for (var i=0; i<fixedAnswers; i++) {
      var answer = $('tr[id$="X'+qID+(ansCount-fixedIndex)+'"]');
 
            var table = $('table.subquestion-list');
 
 
      $(table).append(answer);
      fixedIndex--;
    }
 
        // Update the classes of the odd and even rows for the css
 
        for (var i=0; i<ansCount; i++) {
 
      var answer = $('tr.answers-list:eq('+i+')');
 
      var evenOrOdd = i %2;
 
        if(evenOrOdd==1)
        {
          if ($(answer).hasClass('array2'))
           {
                $(answer).removeClass('array2');
                $(answer).addClass('array1');
 
            }
         }
         if(evenOrOdd==0)
        {
          if ($(answer).hasClass('array1'))
           {
                $(answer).removeClass('array1');
                $(answer).addClass('array2');
 
            }
       }
}  
 
  });
</script>
The topic has been locked.

Lime-years ahead

Online-surveys for every purse and purpose