Welcome, Guest
Username: Password: Remember me

TOPIC: How Array_filter in previous Array (Text) question and Array question result

How Array_filter in previous Array (Text) question and Array question result 2 months 3 weeks ago #111978

  • oikos
  • oikos's Avatar
  • OFFLINE
  • Junior Lime
  • Posts: 22
  • Karma: 0
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?
The administrator has disabled public write access.

How Array_filter in previous Array (Text) question and Array question result 2 months 3 weeks ago #112054

  • oikos
  • oikos's Avatar
  • OFFLINE
  • Junior Lime
  • Posts: 22
  • Karma: 0
Please, can someone help?
Tony Partner, please, could you give me some suggestion?
Thank's in advance.
The administrator has disabled public write access.

How Array_filter in previous Array (Text) question and Array question result 2 months 3 weeks ago #112066

  • tpartner
  • tpartner's Avatar
  • OFFLINE
  • LimeSurvey Team
  • Posts: 4358
  • Thank you received: 826
  • Karma: 381
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?


.
Cheers,
Tony Partner

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

LimeSurvey is open-source and run entirely by volunteers so please consider donating to support the project.
The administrator has disabled public write access.
The following user(s) said Thank You: oikos

How Array_filter in previous Array (Text) question and Array question result 2 months 3 weeks ago #112071

  • oikos
  • oikos's Avatar
  • OFFLINE
  • Junior Lime
  • Posts: 22
  • Karma: 0
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?
B) If each question is on different pages?

I hope not to abuse your generosity, but really you help me a lot. Thanks!
The administrator has disabled public write access.

How Array_filter in previous Array (Text) question and Array question result 2 months 3 weeks ago #112077

  • oikos
  • oikos's Avatar
  • OFFLINE
  • Junior Lime
  • Posts: 22
  • Karma: 0
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)
Attachments:
Last Edit: 2 months 3 weeks ago by oikos. Reason: orthography
The administrator has disabled public write access.

How Array_filter in previous Array (Text) question and Array question result 2 months 3 weeks ago #112088

  • tpartner
  • tpartner's Avatar
  • OFFLINE
  • LimeSurvey Team
  • Posts: 4358
  • Thank you received: 826
  • Karma: 381
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

<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:
CI1_SQ001 == 'A1' || CI1_SQ002 == 'A1' || CI1_SQ003 == 'A1'

File Attachment:

File Name: limesurvey_survey_673531.lss
File Size: 26 KB
Cheers,
Tony Partner

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

LimeSurvey is open-source and run entirely by volunteers so please consider donating to support the project.
Last Edit: 2 months 3 weeks ago by tpartner.
The administrator has disabled public write access.
The following user(s) said Thank You: oikos

How Array_filter in previous Array (Text) question and Array question result 2 months 2 weeks ago #112103

  • oikos
  • oikos's Avatar
  • OFFLINE
  • Junior Lime
  • Posts: 22
  • Karma: 0
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 administrator has disabled public write access.
Moderators: ITEd
Time to create page: 0.173 seconds
Donation Image