Welcome to the LimeSurvey Community Forum

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

Filtering sub questions in a prefiltered array

More
12 years 2 days ago #114064 by achecchini
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
The topic has been locked.
More
12 years 1 day ago #114090 by tpartner

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The topic has been locked.
More
12 years 9 hours ago #114122 by achecchini
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.
The topic has been locked.
More
12 years 6 hours ago #114140 by achecchini
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.
The topic has been locked.
More
11 years 11 months ago #114166 by tpartner
Replace this line in your script:
Code:
$(hiddenInput).attr('checked', checkedState);

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

So, the whole script:
Code:
<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
The topic has been locked.
More
11 years 11 months ago #114168 by achecchini
**** SOLVED !!!! ****
Perfect!! Now it's perfectly functioning. A huge thanks for helping !!
The topic has been locked.
More
11 years 11 months ago #114170 by user42452_d
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.
Code:
<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:
Code:
{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.1 KB
The topic has been locked.
Moderators: tpartner, holch

Lime-years ahead

Online-surveys for every purse and purpose