Welcome to the LimeSurvey Community Forum

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

Create Array 5 Point Choice with Random number, category and maximum score

  • Maverick87Shaka
  • Maverick87Shaka's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
4 years 1 month ago - 4 years 1 month ago #194693 by Maverick87Shaka

Joffm wrote: Please attach a lss export with only these questions.

Joffm

File Attachment:

File Name: limesurvey...tion.lsq
File Size:152 KB

Here you have only this question with 263 subquestions and relevant equation setup for this javascript:
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 arr1 =["001","002","003","004","005","006","007","008","009","010","011","012","013","014","015","016","017","018","019","020","021","022","023","024","025","026","027","028","029","030","031","032","033","034","035","036","037","038","039","040","041","042","043","044","045","046","047","048","049","050","051","052","053","054","055","056","057","058","059","060","061","062","063","064","065","066","067","068","069","070","071","072","073"];
      var arr2 =["074","075","076","077","078","079","080","081","082","083","084","085","086","087","088","089","090","091","092","093","094","095","096","097","098","099",100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126];
      var arr3 =[127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199];
      var arr4 =[200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263];
      arr1 = shuffle(arr1);
      arr2 = shuffle(arr2);
      arr3 = shuffle(arr3);
      arr4 = shuffle(arr4);
      anumbers = '#,' + arr1.slice(0,5).join(',')+ ',';
      anumbers = anumbers + arr2.slice(0,5).join(',')+ ',';
      anumbers = anumbers + arr3.slice(0,5).join(',')+ ',';
      anumbers = anumbers + arr4.slice(0,5).join(',')+ ',';
      $('#question{QID} input[type="text"]').val(anumbers);
      $('#question{QID}').hide();
   });
</script>

It works well until I put the code to make the score point {sum(self.NAOK)}
Last edit: 4 years 1 month ago by Maverick87Shaka. Reason: misspelling
The topic has been locked.
  • Maverick87Shaka
  • Maverick87Shaka's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
4 years 1 month ago - 4 years 1 month ago #194892 by Maverick87Shaka
I made more tests to understand which is the real limit in terms of performance that can i try to push for this assesment with Limesurvey.
The "Limesurvey" way doesn't work in terms of performance, even if I try to pick up "only" first 60 subquestions in a static way to make the test,using:
Code:
{sum(G01Q06_SQ001.NAOK, G01Q06_SQ002.NAOK, ...}
Instead picking all the 273 subquestions database with with
Code:
{sum(self.NAOK)}
the performance remains really low, client browser freeze after making a selection. The performance are "better" then all complete sums, but it's not usable anyway.

I really don't know hot to approach this problem, i was hoping that avoid the whole sums can solve the problem, but it's seams is not like this.

.lss attached :(

File Attachment:

File Name: 5Points_su...tion.lss
File Size:233 KB
Last edit: 4 years 1 month ago by Maverick87Shaka.
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 years 1 month ago #194919 by Joffm
Hi,
You seem to use version 4.x., don't you.

I can reproduce your issue in 4.x.. But no idea about it. I use 4.x. only to test. But it is considered here several times as "slow", "very slow", ...

I do not see any issue in 3.x LTS. No performance issue with 270 items.

Sorry, I am not able to help.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
  • Maverick87Shaka
  • Maverick87Shaka's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
4 years 1 month ago #194933 by Maverick87Shaka
Thanks for your feedback.
Yes, I was on latest 4.1.8 and now I've migrated on 3.22.7 LTS trying to solve the problem.
The Admin interface its really faster, and adding the 270 subquestions using quick add and other functions.....works really faster then before.
But I still have the issue when I try to execute the survey, when it's the time to make the rating of the subquestion, I have browser freeze if inside the question I put {sum(self.NAOK)} or in the validation.


Here the .lss with the 270 subquestions and total sum:

File Attachment:

File Name: limesurvey...Text.lss
File Size:217 KB
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 years 1 month ago #194950 by tpartner
If you are simply trying to display a running count of the "points", instead of using Expression Manager, you can use normal JavaScript by adding something like this to the question text.

The question will still load slowly due to the large number of relevance equations but, once loaded, the radio buttons will respond correctly.

Code:
<p>Some question text...</p>
<p>You have spent <b><span class="points-count">0</span></b> points of 150 available</p>
<script type="text/javascript" charset="utf-8">
 
  $(document).on('ready pjax:scriptcomplete',function(){  
 
    var thisQuestion = $('#question{QID}');
 
    // Listener on the radio buttons
    $('input:radio', thisQuestion).on('click', function(e) {
      var points = 0;
      $('tr.answers-list:visible input:radio:checked', thisQuestion).each(function(i) {
        points = points + Number($(this).val());
      });
 
      $('span.points-count', thisQuestion).text(points);
    });
    });
</script>

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: Maverick87Shaka
The topic has been locked.
  • Maverick87Shaka
  • Maverick87Shaka's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
4 years 1 month ago - 4 years 1 month ago #194958 by Maverick87Shaka
Thanks tpartner!
This code works well without causing any lags while compiling, and makes the goal to display the actual scoring. There is a way to store it and use in the Validation Equation?
At the moment I have just found a quick way in javascript to prevent the users to go ahead, but it's not warning a user like a validation equation, so user can feel lost on why can't submit.
Code:
<script type="text/javascript" charset="utf-8">
 
  $(document).on('ready pjax:scriptcomplete',function(){  
 
    var thisQuestion = $('#question{QID}');
        var btSubmit = document.getElementById('ls-button-submit');
 
    // Listener on the radio buttons
    $('input:radio', thisQuestion).on('click', function(e) {
      var points = 0;
      $('tr.answers-list:visible input:radio:checked', thisQuestion).each(function(i) {
        points = points + Number($(this).val());
      });
 
      $('span.points-count', thisQuestion).text(points);
                        if (points > 50) {
                              btSubmit.disabled = true;
                        }
                        else {
                             btSubmit.disabled = false;
                        }
    });
    });
</script>
Last edit: 4 years 1 month ago by Maverick87Shaka. Reason: missing tags
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 years 1 month ago - 4 years 1 month ago #194991 by tpartner
In that case, I would...

- Remove the validation from the array.

- Insert a numeric question directly after the array (for this example, with question code control1).

- Place a validation equation on that question like this (in this example I will use a maximum of 50 points):
Code:
control1 <= 50

- Place this HTML and script in the numeric question. It will hide the answer, populate the answer with a count from the array and display different text depending on that count. If the array total is over the max allowed the numeric question is invalid so you cannot proceed.
Code:
<p>{if(control1 <= 50, 'You may use up to 50 points', '<span class="text-danger">Warning, you must not exceed 50 points!</span>')}</p>
<script type="text/javascript" charset="utf-8">
 
  $(document).on('ready pjax:scriptcomplete',function(){  
 
    var thisQuestion = $('#question{QID}');
    var arrayQuestion = $(thisQuestion).prevAll('.question-container:eq(0)');
 
    // Listener on the radio buttons
    $('input:radio', arrayQuestion).on('click', function(e) {
      var points = 0;
      $('tr.answers-list:visible input:radio:checked', arrayQuestion).each(function(i) {
        points = points + Number($(this).val());
      });
 
      $('input:text', thisQuestion).val(points).trigger('change');
    });
 
    // Hide some elements
    $('.question-valid-container, .answer-container', thisQuestion).hide();
    });
</script>

Sample survey attached:

File Attachment:

File Name: limesurvey...3378.lss
File Size:230 KB





Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Last edit: 4 years 1 month ago by tpartner.
The topic has been locked.

Lime-years ahead

Online-surveys for every purse and purpose