Filtering sub questions in a prefiltered array

More
3 years 1 month ago #114064 by achecchini
achecchini created the topic: Filtering sub questions in a prefiltered array
Because of my poor knowledge on javascript I have problem to solve the following:

I have a multiple-selection question ie:

question 1
[] Option a
[] Option b
[] Option c
[] Option d

The next question (radiobuttons) is filtered by the Question 1 responses, ie:

question 2
                 1 2 3 4 5
option a () (x) () () ()
Option b () () () () (x)

I want the next question 3 shows the results ONLY if the answer to question 2 has a value less or equal than = 2 ie:

question 3
                    Factor X Factor Y
                    1 2 3 4 1 2 3 4
option a ()()()() ()()()()

Note that the last question is an array dual scale. If I filter by question 2 response I see all checked responses and not only the =< of 2

I've not found on the forum (or I am not able tofound :blink: ) Jscript suitable to my needs

Can someone help me ??
Thank you very much

Please Log in to join the conversation.

More
3 years 1 month ago #114090 by tpartner
tpartner replied the topic: Filtering sub questions in a prefiltered array

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
3 years 1 month ago #114122 by achecchini
achecchini replied the topic: Filtering sub questions in a prefiltered array
Thanks so much for the suggestion! It's very close to my problem.

I have found, suitable for my problem, also this discussion:https://www.limesurvey.org/en/forum/can-i-do-this-with-limesurvey/58002-using-previous-array-question-responses-to-set-following-array-subquestions?q=/en/forum/can-i-do-this-with-limesurvey/58002-using-previous-array-question-responses-to-set-following-array-subquestions&start=40

But there is a problem. If I manipulating the checks box checking and unchecking the radiobutton i.e. check the 1 & 2 column and then check the column 4-5-6 etc repeating this two or three times the filter break in functioning.

I try to understand the problem, but for now I hadn't found a solution ...

Thanks a lot for help!!

A.

Please Log in to join the conversation.

More
3 years 1 month ago #114140 by achecchini
achecchini replied the topic: Filtering sub questions in a prefiltered array
To explane better my problem I attach an example.

The matter is this: when I uncheck one of the radio button in column 1-2 (checking on column 3-4-5 etc.) the corrispondent filtered row in Q2 disappear, BUT if I check another time the radiobutton under column 1-2 in Q1 the filtered corrispondent row in Q2 don't appear.

Any help it's very appreciate :cheer:

Thanks in advance

A.
Attachments:

Please Log in to join the conversation.

More
3 years 1 month ago #114166 by tpartner
tpartner replied the topic: Filtering sub questions in a prefiltered array
Replace this line in your script:
$(hiddenInput).attr('checked', checkedState);

with this:
$(hiddenInput).prop('checked', checkedState);

So, the whole script:
<script type="text/javascript" charset="utf-8">	
	$(document).ready(function() { 
 
		// Call the function
		countChecked('{SGQ}');
 
		function countChecked(sgq) {
			// Identify the questions
			var sID = sgq.split('X')[0];
			var gID = sgq.split('X')[1];
			var qHiddenID = sgq.split('X')[2];
			var qHidden = $('#question'+qHiddenID+'');
			if($(qHidden).length > 0) {
				var q1 = $(qHidden).prevAll('.array-flexible-row:eq(0)'); 
				var q1ID = $(q1).attr('id').split('question')[1];
				var q2 = $(qHidden).nextAll('.array-flexible-row:eq(0)'); 
				var q2ID = $(q2).attr('id').split('question')[1];
			}
 
			// Hide the hidden question
			$('#question'+qHiddenID+'').hide();
 
			// Assign column-specific classes to Q1
			$('.answers-list', q1).each(function(i){
				$('td.answer-item', this).each(function(i){
					$(this).addClass('answer-column-'+(i+1)+'');
				});
			});
 
			// A listener on the 1st column of Q1 radio buttons 
			$('.answer-column-1, .answer-column-2', q1).click(function () { 
				handleHiddenInput (this, 'checked');
			});
 
			// A listener on the 2nd and 3rd columns of Q1 radio buttons 
			$('.answer-column-3, .answer-column-4, .answer-column-5, .answer-column-6, .answer-column-7', q1).click(function () {
				handleHiddenInput (this, 'unchecked');
			});
 
			// A function to toggle the hidden checkboxes 
			function handleHiddenInput(trigger, state) {
				// Identify some stuff
				var rowID = $(trigger).closest('tr.answers-list').attr('id');
				var tmp = rowID.split('X'+q1ID);
				var answerCode = tmp[1];
				var hiddenInput = $('#answer'+sID+'X'+gID+'X'+qHiddenID+answerCode); 
 
				// Toggle the input depending on "state"
				var checkedState = false;
				if(state == 'checked') {
					checkedState = true;
				}
				$(hiddenInput).prop('checked', checkedState);
 
				// Fire the conditions function to hide the corresponding row in Q2
				var hiddenInputValue = $(hiddenInput).attr('value');
				var hiddenInputName = $(hiddenInput).attr('name');
				var hiddenInputType = $(hiddenInput).attr('type');
				checkconditions(hiddenInputValue, hiddenInputName, hiddenInputType);
 
				// Fix up the q2 row background colours
				$('.answers-list:visible', q2).each(function(i, el){
					$(el).removeClass('array1, array2');
					if(i % 2 == 0) {
						$(el).addClass('array2');
					}
					else {
						$(el).addClass('array1');
					}
				});
			}
		}
 
	});
</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: achecchini

Please Log in to join the conversation.

More
3 years 1 month ago #114168 by achecchini
achecchini replied the topic: Filtering sub questions in a prefiltered array
**** SOLVED !!!! ****
Perfect!! Now it's perfectly functioning. A huge thanks for helping !!

Please Log in to join the conversation.

More
3 years 1 month ago #114170 by envitera
envitera replied the topic: Filtering sub questions in a prefiltered array
This also works when questions are not in the same group. Everything is done by Expression Manager, except of 3 lines of code in the question needed for filtering.
<script type="text/javascript" charset="utf-8">
   $('#question{QID}').hide();
</script>

In this case the question used for filtering is a multi numerical question where the fields are set or unset with expressions similar to this:
{if(Q1_1.NAOK=='A1' OR Q1_1.NAOK=='A2',1,'')}

It's a kind of subquestion relevance solution proposed in this post and with a bit of handiwork you can apply it to different types of questions I guess.

File Attachment:

File Name: limesurvey...53EM.lss
File Size:41 KB
Attachments:

Please Log in to join the conversation.

Start now!

Just create your account and start using Limesurvey today.

Register now
Join our Newsletter!