Randomize answer options in array (not subquestions)

Plus d'informations
il y a 3 ans 1 mois #128439 par elissa
elissa a créé le sujet : Randomize answer options in array (not subquestions)
Hi,
I would like to randomize answer options in an array question - not subquestions but answers options. Is there a setting or a workaround for that? I cannot find.
Regards
elisa

Elzbieta Lesinska
LS voluntary Polish translator and supervisor

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 1 mois - il y a 3 ans 1 mois #128442 par tpartner
tpartner a répondu au sujet : Randomize answer options in array (not subquestions)
Hi Elisa. I think this should do the trick...

1) Add this function to the end of template.js:
function randomArrayCols(qID){
 
	var thisQuestion = $('#question'+qID);
 
	// Index the array columns
	$('table.subquestions-list tr', thisQuestion).each(function(i) {
		$('> *', this).each(function(i) {
			$(this).attr('data-index', i);
		});
	});
	if($('.noanswer-item', thisQuestion).length > 0) {
		$('table.subquestions-list tr > :last-child', thisQuestion).addClass('col-no-answer');
	}
 
	// Create an array of the columns
	var columns = [];
	$('table.subquestions-list tr.answers-list:eq(0) td.answer-item', thisQuestion).each(function(i) {
		columns.push($(this).attr('data-index'));
	});	
 
	// A function to shuffle elements or contents of arrays
	(function($){
		$.fn.shuffle = function() {
			return this.each(function(){
				var items = $(this).children();
				return (items.length)
					? $(this).html($.shuffle(items))
					: this;
			});
		}
 
		$.shuffle = function(arr) {
			for(
				var j, x, i = arr.length; i;
				j = parseInt(Math.random() * i),
				x = arr[--i], arr[i] = arr[j], arr[j] = x
			);
			return arr;
 
		}
	})(jQuery);
 
	// Shuffle the columns array
	columns = $.shuffle(columns);
 
	// Reposition the row elements
	$('table.subquestions-list tr', thisQuestion).each(function(i) {
		var thisRow = $(this);
		$(columns).each(function(i, val) {
			thisRow.append($('[data-index="'+val+'"]', thisRow));
			thisRow.append($('.col-no-answer', thisRow));
		});
	});
}

2) Add this script to the source of each array you want randomized:
<script type="text/javascript" charset="utf-8">		
	$(document).ready(function(){
		randomArrayCols({QID});
	});
</script>

Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Dernière édition: il y a 3 ans 1 mois par tpartner.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 1 mois #128443 par elissa
elissa a répondu au sujet : Randomize answer options in array (not subquestions)
Hi Tony,
Thank you for your help but I'm testing it and cannot make it working. Columns stay in original order every time.
Regards
elisa

Elzbieta Lesinska
LS voluntary Polish translator and supervisor

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 1 mois #128444 par tpartner
tpartner a répondu au sujet : Randomize answer options in array (not subquestions)
0ops, sorry, I have a typo in the script for the question source. It should be this:

<script type="text/javascript" charset="utf-8">		
	$(document).ready(function(){
		randomArrayCols({QID});
	});
</script>

Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Les utilisateur(s) suivant ont remercié: elissa

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 1 mois #128447 par elissa
elissa a répondu au sujet : Randomize answer options in array (not subquestions)
Wow, now it works perfectly. Thank you very much! That's really great help for me.

Elzbieta Lesinska
LS voluntary Polish translator and supervisor

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 1 semaine #163879 par zserban
zserban a répondu au sujet : Randomize answer options in array (not subquestions)
Hello tpartner,

Should this work with ver. 2.7?
I am trying it without much success.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 1 semaine #163890 par tpartner
tpartner a répondu au sujet : Randomize answer options in array (not subquestions)
Probably not as it is - there have been many HTML changes. Can you attach a small sample survey containing only that question?

Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Les utilisateur(s) suivant ont remercié: zserban

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 1 semaine #163891 par zserban
zserban a répondu au sujet : Randomize answer options in array (not subquestions)
Sure, thanks for helping.
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 1 semaine #163896 par tpartner
tpartner a répondu au sujet : Randomize answer options in array (not subquestions)
This function will work for 2.73.0:

function randomArrayCols(qID){
 
	var thisQuestion = $('#question'+qID);
 
	// Index the array columns
	$('table.subquestion-list tr', thisQuestion).each(function(i) {
		$('> *', this).each(function(i) {
			$(this).attr('data-index', i);
		});
	});
	if($('.noanswer-item', thisQuestion).length > 0) {
		$('table.subquestion-list tr > :last-child', thisQuestion).addClass('col-no-answer');
	}
 
	// Create an array of the columns
	var columns = [];
	$('table.subquestion-list tr.answers-list:eq(0) td.answer-item', thisQuestion).each(function(i) {
		columns.push($(this).attr('data-index'));
	});	
 
	// A function to shuffle elements or contents of arrays
	(function($){
		$.fn.shuffle = function() {
			return this.each(function(){
				var items = $(this).children();
				return (items.length)
					? $(this).html($.shuffle(items))
					: this;
			});
		}
 
		$.shuffle = function(arr) {
			for(
				var j, x, i = arr.length; i;
				j = parseInt(Math.random() * i),
				x = arr[--i], arr[i] = arr[j], arr[j] = x
			);
			return arr;
 
		}
	})(jQuery);
 
	// Shuffle the columns array
	columns = $.shuffle(columns);
 
	// Reposition the row elements
	$('table.subquestion-list tr', thisQuestion).each(function(i) {
		var thisRow = $(this);
		$(columns).each(function(i, val) {
			thisRow.append($('[data-index="'+val+'"]', thisRow));
			thisRow.append($('.col-no-answer', thisRow));
		});
	});
}

Here is your test survey back with that function and call in the source of the question:

Fichier attaché :

Nom du fichier : limesurvey...5941.lss
Taille du ficher :18 ko

Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Pièces jointes :
Les utilisateur(s) suivant ont remercié: zserban

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 mois 1 semaine #163897 par zserban
zserban a répondu au sujet : Randomize answer options in array (not subquestions)
It sure does work.

Brilliant, thank you!

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 5 mois 1 semaine #170782 par zserban
zserban a répondu au sujet : Randomize answer options in array (not subquestions)
Hi tpartner,


Do you have any idea if/how to do this in Limesurvey v3.13?


I uploaded an example.
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 5 mois 1 semaine #170783 par zserban
zserban a répondu au sujet : Randomize answer options in array (not subquestions)
Nevermind, your code still works!

All one needs to do is to add the theme code in the custom.js, rather them template.js

Connexion ou Créer un compte pour participer à la conversation.

Commencez dès maintenant !

Créez simplement un compte et commencez à utiliser LimeSurvey dès aujourd'hui.

Inscrivez-vous maintenant

Inscrivez-vous à notre Newsletter!