Filtering sub questions in a prefiltered array

More
3 years 9 months 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 or Create an account to join the conversation.

More
3 years 9 months 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 or Create an account to join the conversation.

More
3 years 9 months 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 or Create an account to join the conversation.

More
3 years 9 months 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 or Create an account to join the conversation.

More
3 years 9 months 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 or Create an account to join the conversation.

More
3 years 9 months 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 or Create an account to join the conversation.

More
3 years 9 months 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 or Create an account to join the conversation.

Start now!

Just create your account and start using Limesurvey today.

Register now
Join our Newsletter!