Welcome to the LimeSurvey Community Forum

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

Randomly show X out of Y question groups in Version 3.22

  • lbj4715
  • lbj4715's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
4 years 3 weeks ago #195806 by lbj4715
Hi there,

I try to select randomly 4 out of 8 question groups. I have already found this solution here manual.limesurvey.org/Workarounds:_Surve...of_Y_question_groups

But this workaround was based on Version 2.0, therefore I cannot follow this solution way to finish my design.

How to implement this in Version 3.22?

Great thanks for your help and time.
The topic has been locked.
More
4 years 3 weeks ago - 4 years 3 weeks ago #195808 by jelo
Last edit: 4 years 3 weeks ago by jelo. Reason: English link
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Online
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 years 3 weeks ago - 4 years 3 weeks ago #195815 by Joffm
Hi,
I'd do it like this:
Create a question (QSelect) of type "short text" with the following javascript in the source code:
(the eight characters "A"..."H" represent your eight groups.
Code:
<script type="text/javascript" charset="utf-8">
 
function shuffle(array) {
  var currentIndex = array.length, temporaryValue, randomIndex;
 
  // While there remain elements to shuffle...
  while (0 !== currentIndex) {
 
    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;
 
    // And swap it with the current element.
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }
 
  return array;
}
 
 
$(document).on('ready pjax:scriptcomplete',function(){
// Fill the array
      var arr =["A","B","C","D","E","F","G","H"];
      arr = shuffle(arr);
      anumbers = '#' + arr.slice(0,4).join(',');
 
      $('#question{QID} input[type="text"]').val(anumbers).trigger('keyup');  
      $('#question{QID}').hide();
   });
</script>

This will return something like that:
#H,A,D,F

You see, there are randomly selected 4 characters out of the eight.

Now set the relevance equation of each group accordingly (display, if the string contains the character)
Group 1: strpos(QSelect,"A")>0
Group 2: strpos(QSelect,"B")>0
...

BTW: The leading "#" is there to avoid that (in this example) the letter "H" has the index "0", which also means "not found".

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 4 years 3 weeks ago by Joffm.
The topic has been locked.
  • lbj4715
  • lbj4715's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
4 years 3 weeks ago #195816 by lbj4715
The JAVA script works very well.
Great thanks for your help.
The topic has been locked.

Lime-years ahead

Online-surveys for every purse and purpose