Check out the LimeSurvey source code on GitHub!

Answer options based on previous question

More
4 years 4 weeks ago #91501 by stuttgarter
Hello,
I have two set of attributes
1. Courses : C1, C2, C3, C4 etc.
2. Teachers: T1, T2, T3, T4, T5, T6

Now
Q1: Course
Q2: Teacher

If user Chooses C1, options in Q2 should be T1, T3, T5
If user Chooses C2, options in Q2 should be T1, T2, T3, T4
If user Chooses C3, options in Q2 should be T2, T3, T4, T5 and so on

Any Suggestions???

Please Log in to join the conversation.

More
4 years 4 weeks ago #91507 by KRav
This should be possible with the Expression Manager and an array filter.

Cheers Kai


research on BLOGS - Professional LimeSurvey support
Consultant - Templates - Training - JQuery magic - Support - Coding - Survey creation and more..

Contact
Professional LimeSurvey support
This email address is being protected from spambots. You need JavaScript enabled to view it.

Please Log in to join the conversation.

More
4 years 4 weeks ago #91524 by tpartner
I don't think array filter will work in this case because you would like to show several options in Q2 per Q1 option. Array filter is limited to identical answer codes in both questions.

You could do it with custom JavaScript but the details of that script would depend on your question types and the filtering criteria.

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.

Please Log in to join the conversation.

More
4 years 4 weeks ago #91541 by stuttgarter
Both question types are radio button.
Could you elaborate a bit more about java script possibility?
Currently i am doing it manually and Q1 & Q2 are all together more than 100 possible questions by using if condition and its making me mad.

Thanks in advance.

Please Log in to join the conversation.

More
4 years 4 weeks ago #91625 by tpartner
Okay, here's a little script that if placed in the source of Q1, will filter Q2 per your example above.

Assumptions are:
- both questions are on the same page
- both are list-radios
- they use the answer codes defined above
- the script is placed in the source of the first question
<script type="text/javascript" charset="utf-8">
	$(document).ready(function(){
 
		// The Q2 options relevant to the Q1 options		
		teacherLists = {
			C1 : 'T1,T3,T5',
			C2 : 'T1,T2,T3,T4',
			C3 : 'T2,T3,T4,T5',
			C4 : 'T1,T4,T6',
		};
 
		// Identify the questions
		var q1ID = '{QID}';
		var q1 = $('#question'+q1ID+'');
		var q2 = $(q1).nextAll('.list-radio:eq(0)'); 
		var q2ID = $(q2).attr('id').split('question')[1];
 
		// Find the initially checked option in Q1 (if any)
		var q1Ans = '';
		if($('input.radio:checked', q1).length > 0) {
			q1Ans = $('input.radio:checked', q1).attr('value');
		}
 
		// Initially Hide/Show the appropriate teachers
		showTeachers(q1Ans);
 
		// Click events on Q1 radios
		$('input.radio', q1).click(function() {
			var value = $(this).attr('value');
			// Q1 has been changed
			if(value != q1Ans) {
				q1Ans = value;
				// Clear the Q2 answer
				$('input.radio', q2).attr('checked', false)
				// Show the appropriate teachers
				showTeachers(q1Ans);
			}
		});
 
		// A function to show the appropriate teachers
		function showTeachers(q1Ans) {
			// Hide all of the teachers
			$('li[id^="javatbd"]', q2).hide();
			// Now show the appropriate ones
			if(q1Ans != '') {
				$(teacherLists[q1Ans].split(',')).each(function(i){
					$('input.radio[id$="'+q2ID+this+'"]').closest('li').show();
				});
			}
		}
 
	});
</script>

Here's a demo survey:

File Attachment:

File Name: limesurvey...1532.lss
File Size:18 KB

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Attachments:

Please Log in to join the conversation.

More
4 years 4 weeks ago #91627 by stuttgarter
I appreciate your answer. Exactly the way i wanted.

Million thanks.

Please Log in to join the conversation.

More
4 years 3 weeks ago #91730 by stuttgarter
Your solution is working great.
I am trying to implement the same script for another question set with Q1(Radio) and Q2(Multiple Choice) but its not working. I have changed the code from radio to checkbox.

Any guidance would be much appreciated.

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

// The Q2 options relevant to the Q1 options
teacherLists = {
C1 : 'T1,T3,T5',
C2 : 'T1,T2,T3,T4',
C3 : 'T2,T3,T4,T5',
C4 : 'T1,T4,T6',
};

// Identify the questions
var q1ID = '{QID}';
var q1 = $('#question'+q1ID+'');
var q2 = $(q1).nextAll('.list-radio:eq(0)');
var q2ID = $(q2).attr('id').split('question')[1];

// Find the initially checked option in Q1 (if any)
var q1Ans = '';
if($('input.radio:checked', q1).length > 0) {
q1Ans = $('input.radio:checked', q1).attr('value');
}

// Initially Hide/Show the appropriate teachers
showTeachers(q1Ans);

// Click events on Q1 radios
$('input.radio', q1).click(function() {
var value = $(this).attr('value');
// Q1 has been changed
if(value != q1Ans) {
q1Ans = value;
// Clear the Q2 answer
$('input.checkbox', q2).attr('checked', false)
// Show the appropriate teachers
showTeachers(q1Ans);
}
});

// A function to show the appropriate teachers
function showTeachers(q1Ans) {
// Hide all of the teachers
$('li[id^="javatbd"]', q2).hide();
// Now show the appropriate ones
if(q1Ans != '') {
$(teacherLists[q1Ans].split(',')).each(function(i){
$('input.checkbox[id$="'+q2ID+this+'"]').closest('li').show();
});
}
}

});
</script>

Please Log in to join the conversation.

More
4 years 3 weeks ago #91751 by tpartner
You missed one selector.

This:
var q2 = $(q1).nextAll('.list-radio:eq(0)');
Should be this:
var q2 = $(q1).nextAll('.multiple-opt:eq(0)');
<script type="text/javascript" charset="utf-8">
	$(document).ready(function(){
 
		// The Q2 options relevant to the Q1 options		
		teacherLists = {
			C1 : 'T1,T3,T5',
			C2 : 'T1,T2,T3,T4',
			C3 : 'T2,T3,T4,T5',
			C4 : 'T1,T4,T6',
		};
 
		// Identify the questions
		var q1ID = '{QID}';
		var q1 = $('#question'+q1ID+'');
		var q2 = $(q1).nextAll('.multiple-opt:eq(0)'); 
		var q2ID = $(q2).attr('id').split('question')[1];
 
		// Find the initially checked option in Q1
		var q1Ans = '';
		if($('input.radio:checked', q1).length > 0) {
			q1Ans = $('input.radio:checked', q1).attr('value');
		}
 
		// Initially Hide/Show the appropriate teachers
		showTeachers(q1Ans);
 
		// Click events on Q1 radios
		$('input.radio', q1).click(function() {
			var value = $(this).attr('value');
			// Q1 has been changed
			if(value != q1Ans) {
				q1Ans = value;
				// Clear the Q2 answer
				$('input.checkbox', q2).attr('checked', false)
				// Show the appropriate teachers
				showTeachers(q1Ans);
			}
		});
 
		// A function to show the appropriate teachers
		function showTeachers(q1Ans) {
			// Hide all of the teachers
			$('li[id^="javatbd"]', q2).hide();
			// Now show the appropriate ones
			if(q1Ans != '') {
				$(teacherLists[q1Ans].split(',')).each(function(i){
					$('input.checkbox[id$="'+q2ID+this+'"]').closest('li').show();
				});
			}
		}
 
	});
</script>

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.

Please Log in to join the conversation.

More
4 years 3 weeks ago #91774 by stuttgarter
Thank you very much Tony.
just one more question:
Is there any list/reference of selector codes like multiple-opt, list.radio etc. based on lime survey question types?

Please Log in to join the conversation.

More
4 years 3 weeks ago #91775 by tpartner
Yup - docs.limesurvey.org/The+template+editor&..._of_question_classes

Or you can explore the document with a tool like Firebug for Firefox:


Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Attachments:

Please Log in to join the conversation.

More
4 years 3 weeks ago #91796 by stuttgarter
Thanks a lot Tony :) .

Please Log in to join the conversation.

More
1 year 3 months ago #128545 by mmsurveys
Hello, I have a another question based on this situation.
How do I do this if the questions are not on the same page? (So If I display the questions page per page).
Question 1 lets the user choose the course
Question 2 lets the user select the teacher which is possible for the selected course?

Can you please give me a shot example?!
Many thanks in advance!

Please Log in to join the conversation.

More
1 year 3 months ago #128562 by tpartner
Assuming both questions are single-choice radios, remove the script from Q1 and add something like this to Q2:

<script type="text/javascript" charset="utf-8">
	$(document).ready(function(){
 
		// The Q2 options corresponding to the Q1 options		
		teacherLists = {
			C1 : 'T1,T3,T5',
			C2 : 'T1,T2,T3,T4',
			C3 : 'T2,T3,T4,T5',
			C4 : 'T1,T4,T6'
		};
 
		// Identify this question
		var thisQuestion = $('#question{QID}')
 
		// The checked option in Q1
		var q1Ans = '{Q1}';
 
		// Hide all of the teachers
		$('li[id^="javatbd"]', thisQuestion).hide();
 
		// Now show the appropriate ones
		$(teacherLists[q1Ans].split(',')).each(function(i){
			$('input.radio[id$="'+{QID}+this+'"]').closest('li').show();
		});
 
		// Uncheck all hidden radios (in case page has been seen before)
		$('li[id^="javatbd"]:hidden input.radio', thisQuestion).prop('checked', false);
	});
</script>

Sample survey attached:

File Attachment:

File Name: limesurvey...2(1).lss
File Size:16 KB

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Attachments:

Please Log in to join the conversation.

More
1 year 3 months ago #128563 by DenisChenu
Hi,

I use another method, using an "multiple choice" and check it acording to selection : demonstration.sondages.pro/676785#

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).

Please Log in to join the conversation.

More
1 year 3 months ago #128566 by mmsurveys
Thank you very much Tony!!! This should do the job!

Please Log in to join the conversation.

Imprint                   Privacy policy         General Terms & Conditions         Revocation information and revocation form