Welcome to the LimeSurvey Community Forum

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

Multilingual surve: sorting responses alphabetically in a 2nd, 3rd language ?

  • karld
  • karld's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
9 years 10 months ago - 9 years 10 months ago #107816 by karld
Hello,

I have a survey with 2 languages:
  • in the main language, the answers of a question (e.g. multiple choice) are sorted alphabetically (I did it when designing the question)
  • How can I have the answers sorted alphabetically in the second language?

Thanks in advance,

--
Carl
Last edit: 9 years 10 months ago by karld.
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
9 years 10 months ago - 9 years 10 months ago #107852 by tpartner
You will need to use a little JavaScript to move those around.

Here's a solution for list-radio and multiple-choice questions

1) Set up your survey to use JavaScript .

2) Add this function to the end of template.js:
Code:
function sortOptions(qID) {
 
  // Identify this question
  var thisQuestion = $('#question'+qID);
 
  // Create an array of subquestions
  var subQsArr = new Array();
  $('li.answer-item', thisQuestion).each(function(i) {
    var thisString = $(this).find('.answertext').text()+'---'+$(this).attr('id');
    subQsArr.push(thisString);
  });
 
  // Sort the array
  subQsArr.sort();
 
  // Repostion the subquestions in the sorted order
  $(subQsArr).each(function(i, val) {
    var thisID = val.split('---')[1];
    $('li.answer-item:eq(0)', thisQuestion).parent().append($('#'+thisID));
  });
}

3) Add this script to the source of every question that you want sorted (in all languages to be sorted):
Code:
<script type="text/javascript" charset="utf-8">  
  $(document).ready(function() {
    sortOptions({QID});
  });
</script>

.

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Last edit: 9 years 10 months ago by tpartner.
The following user(s) said Thank You: karld
The topic has been locked.
  • karld
  • karld's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
9 years 10 months ago #107883 by karld
Thank you very much.

I have tried it on a radio buttons list question, it works fine, but the "other" with a textbox is also sorted.
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
9 years 10 months ago #107890 by tpartner
Oh, yeah, forgot that. Use this as the function in template.js:
Code:
function sortOptions(qID) {
 
  // Identify this question
  var thisQuestion = $('#question'+qID);
 
  // Create an array of subquestions
  var subQsArr = new Array();
  $('li.answer-item', thisQuestion).each(function(i) {
    var thisString = $(this).find('.answertext').text()+'---'+$(this).attr('id');
    subQsArr.push(thisString);
  });
 
  // Sort the array
  subQsArr.sort();
 
  // Repostion the subquestions in the sorted order
  $(subQsArr).each(function(i, val) {
    var thisID = val.split('---')[1];
    $('li.answer-item:eq(0)', thisQuestion).parent().append($('#'+thisID));
  });
  $('li.answer-item:eq(0)', thisQuestion).parent().append($('li.answer-item[id$="other"]', thisQuestion));
}

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: karld
The topic has been locked.
  • karld
  • karld's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
9 years 10 months ago - 9 years 10 months ago #107900 by karld
Great ! It works as expected.

Many thanks.
Last edit: 9 years 10 months ago by karld.
The topic has been locked.
More
3 years 10 months ago #197945 by ymca
Hi,

I've also tried that, but it didn't work for me.

Version 4.2.0+200422

LS Version 4.2+
The topic has been locked.
More
3 years 10 months ago #197946 by ymca

ymca wrote: Hi,

I've also tried that, but it didn't work for me.

Version 4.2.0+200422


Maybe the problem is here?
I've insert the text from here to the empty "costum.js" because "templet.js" had a warning not to edit.

tpartner wrote: Oh, yeah, forgot that. Use this as the function in template.js:

Code:
function sortOptions(qID) {
 
  // Identify this question
  var thisQuestion = $('#question'+qID);
 
  // Create an array of subquestions
  var subQsArr = new Array();
  $('li.answer-item', thisQuestion).each(function(i) {
    var thisString = $(this).find('.answertext').text()+'---'+$(this).attr('id');
    subQsArr.push(thisString);
  });
 
  // Sort the array
  subQsArr.sort();
 
  // Repostion the subquestions in the sorted order
  $(subQsArr).each(function(i, val) {
    var thisID = val.split('---')[1];
    $('li.answer-item:eq(0)', thisQuestion).parent().append($('#'+thisID));
  });
  $('li.answer-item:eq(0)', thisQuestion).parent().append($('li.answer-item[id$="other"]', thisQuestion));
}


LS Version 4.2+
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 10 months ago #197956 by Joffm
This thread started 6 years ago.
So, how can you expect a script, that was obviously created for a previous version (maybe 1.92 or 2.05) , to run.

Nowadays we have the option:
Sort answers alphabetically

that works fine in version 3.x






even in drop downs


But obviously there is a bug in version 4.x.




You should file a bug report

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
More
3 years 10 months ago #197967 by ymca

Joffm wrote: This thread started 6 years ago.
So, how can you expect a script, that was obviously created for a previous version (maybe 1.92 or 2.05) , to run.

Wasn't expecting, was hoping.

You should file a bug report

Sure.

LS Version 4.2+
The topic has been locked.

Lime-years ahead

Online-surveys for every purse and purpose