- Posts: 24
- Thank you received: 0
Welcome to the LimeSurvey Community Forum
Ask the community, share ideas, and connect with other LimeSurvey users!
How Array_filter in previous Array (Text) question and Array question result
- oikos
- Topic Author
- Offline
- Junior Member
Less
More
9 years 6 months ago #111978
by oikos
How Array_filter in previous Array (Text) question and Array question result was created by oikos
Hi!
Q1 is an Array question with Yes/No answer options; Q2 is an Array (Text) question. And I want the Q2 question have only the selected subquestions marked as 'Yes' in the previous Q1 question.
So, I've put an Array_filter in Q2 question with Q1 code question, but the problem is that all subquestions appear in Q2, as such whether the answer is Yes as No.
In Q2 I just want the subquestions marked as Yes in Q1... Please, how do I do it?
Q1 is an Array question with Yes/No answer options; Q2 is an Array (Text) question. And I want the Q2 question have only the selected subquestions marked as 'Yes' in the previous Q1 question.
So, I've put an Array_filter in Q2 question with Q1 code question, but the problem is that all subquestions appear in Q2, as such whether the answer is Yes as No.
In Q2 I just want the subquestions marked as Yes in Q1... Please, how do I do it?
The topic has been locked.
- oikos
- Topic Author
- Offline
- Junior Member
Less
More
- Posts: 24
- Thank you received: 0
9 years 6 months ago #112054
by oikos
Replied by oikos on topic How Array_filter in previous Array (Text) question and Array question result
Please, can someone help?
Tony Partner, please, could you give me some suggestion?
Thank's in advance.
Tony Partner, please, could you give me some suggestion?
Thank's in advance.
The topic has been locked.
- tpartner
- Offline
- LimeSurvey Community Team
Less
More
- Posts: 10611
- Thank you received: 3690
9 years 6 months ago #112066
by tpartner
Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Replied by tpartner on topic How Array_filter in previous Array (Text) question and Array question result
Well, if both questions are on the same page you can use JavaScript to simply filter the rows of Q2 but you will run into trouble if Q2 is mandatory. (a hidden unanswered row in Q2 will prevent moving ahead in the survey)
I think you will need to:
1) add a hidden multiple-choice question
2) use JavaScript to dynamically check the multiple-choice boxes according to the Q1 answers
3) filter Q2 on the hidden question
Can you attach a small sample survey containing that group?
.
I think you will need to:
1) add a hidden multiple-choice question
2) use JavaScript to dynamically check the multiple-choice boxes according to the Q1 answers
3) filter Q2 on the hidden question
Can you attach a small sample survey containing that group?
.
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: oikos
The topic has been locked.
- oikos
- Topic Author
- Offline
- Junior Member
Less
More
- Posts: 24
- Thank you received: 0
9 years 6 months ago #112071
by oikos
Replied by oikos on topic How Array_filter in previous Array (Text) question and Array question result
Tony, thank you very much!
Here the example: demo.limesurvey.org/index.php?r=survey/index/sid/726616/lang/es
At the backend ( How Array_filter (ID 726616) ): demo.limesurvey.org/index.php?r=admin/su...view/surveyid/726616
Please, could you show how the JavaScript code would be? I'm newbie about it.
A) If both questions are on the same page?
If each question is on different pages?
I hope not to abuse your generosity, but really you help me a lot. Thanks!
Here the example: demo.limesurvey.org/index.php?r=survey/index/sid/726616/lang/es
At the backend ( How Array_filter (ID 726616) ): demo.limesurvey.org/index.php?r=admin/su...view/surveyid/726616
Please, could you show how the JavaScript code would be? I'm newbie about it.
A) If both questions are on the same page?
If each question is on different pages?
I hope not to abuse your generosity, but really you help me a lot. Thanks!
The topic has been locked.
- oikos
- Topic Author
- Offline
- Junior Member
Less
More
- Posts: 24
- Thank you received: 0
9 years 6 months ago - 9 years 6 months ago #112077
by oikos
Replied by oikos on topic How Array_filter in previous Array (Text) question and Array question result
Sorry, the links are broken.
New link in frontend: www.instituto-csic.es/uclm.grokis/limesu...x.php/346763?lang=es
Question group in attachment (notice: default language is Spanish)
New link in frontend: www.instituto-csic.es/uclm.grokis/limesu...x.php/346763?lang=es
Question group in attachment (notice: default language is Spanish)
Attachments:
Last edit: 9 years 6 months ago by oikos. Reason: orthography
The topic has been locked.
- tpartner
- Offline
- LimeSurvey Community Team
Less
More
- Posts: 10611
- Thank you received: 3690
9 years 6 months ago - 9 years 6 months ago #112088
by tpartner
Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Replied by tpartner on topic How Array_filter in previous Array (Text) question and Array question result
1)
Set up your survey to use JavaScript
.
2) Directly after Q1, add a multiple-choice question with the same sub-questions and codes as Q1 (we'll call this "qHidden").
3) Set Q2 (and any subsequent arrays) to be array-filtered by qHidden.
4) Add the following script to the source of the qHidden. This will:
- hide qHidden
- put a listener on the Q1 radios
- if a radio in column 1 of Q1 is clicked, the corresponding checkbox in qHidden is checked and the array filter handles the display of rows in Q2
Here's a working survey (with an additional array in a following group also filtered by qHidden). In this survey, I also added the following relevance to Q2 and Q3 so the whole question is hidden unless a radio in column 1 of Q1 is clicked:
2) Directly after Q1, add a multiple-choice question with the same sub-questions and codes as Q1 (we'll call this "qHidden").
3) Set Q2 (and any subsequent arrays) to be array-filtered by qHidden.
4) Add the following script to the source of the qHidden. This will:
- hide qHidden
- put a listener on the Q1 radios
- if a radio in column 1 of Q1 is clicked, the corresponding checkbox in qHidden is checked and the array filter handles the display of rows in Q2
Code:
<script type="text/javascript" charset="utf-8"> $(document).ready(function(){ // Identify the questions var qHiddenID = ('{QID}'); var qHidden = $('#question'+qHiddenID); var q1 = $(qHidden).prevAll('.array-flexible-row:eq(0)'); var q1ID = $(q1).attr('id').split('question')[1]; // Hide the hidden question $(qHidden).css({ 'position': 'absolute', 'left': '-999em' }); // Add some column-specific classes to Q1 $('table.subquestions-list tr', q1).each(function(i){ $('> *', this).each(function(i){ $(this).addClass('column-'+i); }); }); // Listener on Q1 $('input.radio', q1).change(function(event){ // Reset the hidden question $('input.checkbox', qHidden).prop('checked', false); $('li.question-item input[type="hidden"]', qHidden).val(''); // Check the appropriate boxes in the hidden question $('.column-1 input.radio:checked', q1).each(function(i) { var thisCode = $(this).attr('id').split('X'+q1ID)[1].split('-')[0]; $('input.checkbox[id$="X'+qHiddenID+thisCode+'"]', qHidden).prop('checked', true); $('input.checkbox[id$="X'+qHiddenID+thisCode+'"]', qHidden).next('input[type="hidden"]').val('Y'); }); // Fire the array filter $('input.checkbox', qHidden).each(function(i) { checkconditions($(this).attr('value'), $(this).attr('name'), $(this).attr('type')); }); }); }); </script>
Here's a working survey (with an additional array in a following group also filtered by qHidden). In this survey, I also added the following relevance to Q2 and Q3 so the whole question is hidden unless a radio in column 1 of Q1 is clicked:
Code:
CI1_SQ001 == 'A1' || CI1_SQ002 == 'A1' || CI1_SQ003 == 'A1'
Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Attachments:
Last edit: 9 years 6 months ago by tpartner.
The following user(s) said Thank You: oikos
The topic has been locked.
- oikos
- Topic Author
- Offline
- Junior Member
Less
More
- Posts: 24
- Thank you received: 0
9 years 6 months ago #112103
by oikos
Replied by oikos on topic How Array_filter in previous Array (Text) question and Array question result
Wow, that looks great! That's exactly what I was looking for, it works perfectly! Thank you very much for all your work on this, Tony!
The topic has been locked.
- aehruesch
- Offline
- New Member
Less
More
- Posts: 4
- Thank you received: 0
8 years 1 month ago #130827
by aehruesch
Replied by aehruesch on topic How Array_filter in previous Array (Text) question and Array question result
Hello,
I tried to adapt the Code above and it works fine if I'm just interested in the first column. Is there a way to enhance it to the second column (all in all I have 4 columns)?
My JS-skills are very limited (all I know I basically learned in this forum). It would be nice to know, what I have to change in the code above to make my example work.
Thanks in advance,
Eric
I tried to adapt the Code above and it works fine if I'm just interested in the first column. Is there a way to enhance it to the second column (all in all I have 4 columns)?
My JS-skills are very limited (all I know I basically learned in this forum). It would be nice to know, what I have to change in the code above to make my example work.
Thanks in advance,
Eric
The topic has been locked.
- aehruesch
- Offline
- New Member
Less
More
- Posts: 4
- Thank you received: 0
8 years 1 month ago #130913
by aehruesch
Replied by aehruesch on topic How Array_filter in previous Array (Text) question and Array question result
I solved it myself with a little trial and error.
Anyway, this is the changed code for column 1 and 2:
Anyway, this is the changed code for column 1 and 2:
Code:
Hidden question to filter following array(s). <script type="text/javascript" charset="utf-8"> $(document).ready(function(){ // Identify the questions var qHiddenID = ('{QID}'); var qHidden = $('#question'+qHiddenID); var q1 = $(qHidden).prevAll('.array-flexible-row:eq(0)'); var q1ID = $(q1).attr('id').split('question')[1]; // Hide the hidden question $(qHidden).css({ 'position': 'absolute', 'left': '-999em' }); // Add some column-specific classes to Q1 $('table.subquestions-list tr', q1).each(function(i){ $('> *', this).each(function(i){ $(this).addClass('column-'+i); }); }); // Listener on Q1 $('input.radio', q1).change(function(event){ // Reset the hidden question $('input.checkbox', qHidden).prop('checked', false); $('li.question-item input[type="hidden"]', qHidden).val(''); // Check the appropriate boxes in the hidden question $('.column-1 input.radio:checked', q1).each(function(i) { var thisCode = $(this).attr('id').split('X'+q1ID)[1].split('-')[0]; $('input.checkbox[id$="X'+qHiddenID+thisCode+'"]', qHidden).prop('checked', true); $('input.checkbox[id$="X'+qHiddenID+thisCode+'"]', qHidden).next('input[type="hidden"]').val('Y'); }); $('.column-2 input.radio:checked', q1).each(function(i) { var thisCode = $(this).attr('id').split('X'+q1ID)[1].split('-')[0]; $('input.checkbox[id$="X'+qHiddenID+thisCode+'"]', qHidden).prop('checked', true); $('input.checkbox[id$="X'+qHiddenID+thisCode+'"]', qHidden).next('input[type="hidden"]').val('Y'); }); // Fire the array filter $('input.checkbox', qHidden).each(function(i) { checkconditions($(this).attr('value'), $(this).attr('name'), $(this).attr('type')); }); }); }); </script>
The topic has been locked.
- DenisChenu
- Offline
- LimeSurvey Community Team
Less
More
- Posts: 13907
- Thank you received: 2546
8 years 1 month ago #130926
by DenisChenu
Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
Replied by DenisChenu on topic How Array_filter in previous Array (Text) question and Array question result
Actaully, witha 2.06 version : really more easy to use "Relevance equation" for sub quetsion.
This topic is set when this setting don't exist.
This topic is set when this setting don't exist.
Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
The following user(s) said Thank You: tpartner
The topic has been locked.
- bogika0107
- Offline
- New Member
Less
More
- Posts: 17
- Thank you received: 0
8 years 1 month ago #131188
by bogika0107
Replied by bogika0107 on topic How Array_filter in previous Array (Text) question and Array question result
Can you show me the more easy way with example, because i try the script and any other codes etc. and didn't work. I use 2.06 version. I have to exactly the same solution than Oikos.
The topic has been locked.
- holch
- Offline
- LimeSurvey Community Team
Less
More
- Posts: 11746
- Thank you received: 2750
8 years 1 month ago #131192
by holch
I answer at the LimeSurvey forum in my spare time, I'm not a LimeSurvey GmbH employee.
No support via private message.
Replied by holch on topic How Array_filter in previous Array (Text) question and Array question result
Well, the easy way is to use relevance equations on subquestions, as Dennis said above.
Just as for questions or questions group, from 2.06 onwards you can show/hide subquestions via the relevance equations for each subquestion.
Just as for questions or questions group, from 2.06 onwards you can show/hide subquestions via the relevance equations for each subquestion.
I answer at the LimeSurvey forum in my spare time, I'm not a LimeSurvey GmbH employee.
No support via private message.
The topic has been locked.