Welcome to the LimeSurvey Community Forum

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

HowTo Filter the Columns of an Array (Numbers)

  • scottturnbull
  • scottturnbull's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
9 years 9 months ago #109458 by scottturnbull
HowTo Filter the Columns of an Array (Numbers) was created by scottturnbull
Is there a way in the LimeSurvey dialogs to control the visibility of columns in an array (numbers) question?

I am working on implementing a survey in which a set of actions is presented in a multi choice list.
i.e.
"Select the following types of communication you participate in with one or more of your contacts."

A subsequent question will present a lengthy list of contacts, and ask that the participant mark which communication actions are engaged in with each contact.

This is being created as questions of type Array (numbers) with the checkbox option enabled. The desired result is a grid of checkboxes with communication types as columns and contacts as the rows.

We would like the list of actions from the setup question to be used as an array filter for the columns of the array numbers question type. Only those actions that the participant stated they sometimes use would be shown as a checkbox option for each listed contact.

I can easily manage using an array filter from a previous question to control display of array (numbers) rows, but I haven't found a way to have an array filter control array (numbers) columns.

To restate my opening question,
Is there a way in the LimeSurvey dialogs, or is a bit of custom javascript the only way to hide columns based on previous answer values?
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Online
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
9 years 9 months ago #109462 by tpartner
Replied by tpartner on topic HowTo Filter the Columns of an Array (Numbers)
You will need to use JavaScript for that.

For inspiration - manual.limesurvey.org/Workarounds:_Manip...2Multiple-Options.22 .


.

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: scottturnbull
The topic has been locked.
More
9 years 9 months ago #109464 by Bigred01
Replied by Bigred01 on topic HowTo Filter the Columns of an Array (Numbers)
I read in a previous forum post that someone created a multiple choice question for each column then by using float left on them, they lined them up side by side. (I wish i could find a link to point you to it..If i do i will add it to this post)

The answer options were also in a multiple choice question with the same amount of options but the checkboxes were hidden. The text lined up with all of the other questions.

Instead of using the array filter, you can set the relevance for each "column"(question) separately.

This approach would allow you to use all of the built in limesurvey exclusive options available for multiple choice questions but will involve some styling on your part to get it looking right.

If you do it like this though you will probably want a fixed question width so the columns wont stack when the window is resized or the respondent has a low resolution.
The following user(s) said Thank You: scottturnbull
The topic has been locked.
  • scottturnbull
  • scottturnbull's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
9 years 9 months ago #109893 by scottturnbull
Replied by scottturnbull on topic HowTo Filter the Columns of an Array (Numbers)
I was hoping I had simply missed the combination of dialog knobs that would give control of column visibility.

As with many such projects, the requirements shift, and the need to hide the columns has faded away. It was a worthy exercise in use of techniques for the javascript merging of multiple questions into a single composite question on the screen. I'll tuck the technique into my toolbox for use another day.

Thanks, all.
The topic has been locked.
More
7 years 11 months ago #135099 by first
Bigred wrote:

I read in a previous forum post that someone created a multiple choice question for each column then by using float left on them, they lined them up side by side. (I wish i could find a link to point you to it..If i do i will add it to this post)


I tried it some time but demo survey was hosted on limeservice which is not expired. Anyway i will try to rewrite the code and share.

You can find this thread quickly remembering it as first thread in plugins folder :)

www.limesurvey.org/forum/plugins/95000-c...nd-exclusive-options

Survey Designer and Programmer
The topic has been locked.
More
7 years 11 months ago #135102 by first
Its almost done. You may need to adjust some look and feel or maybe tpartner will help us to extend this script so that it works without any modification.

#We create as many multi questions as we need columns.
#The move those column side by side with float left.
#Adjust labels.

Benefits:
#You can hide columns with relevance.
#Sub-question relevance will still work.
#You can make use advance setting that are multi choice question.

File Attachment:

File Name: limesurvey...3985.lss
File Size:37 KB


Tested with Version 2.06+ Build 150612 default template.

Survey Designer and Programmer
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
7 years 11 months ago #135109 by DenisChenu
Replied by DenisChenu on topic HowTo Filter the Columns of an Array (Numbers)
Hi,

Plugin : git.framasoft.org/SondagePro-LimeSurvey-plugin/hideEmptyColumn
Demo : demonstration.sondages.pro/655577

Not tested in 2.50 surely some css to update

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: socius
The topic has been locked.
More
7 years 6 months ago #141890 by ericwu
Hello

Tried to modify the function filterArrByCol for filter Array (Numbers) by Columns, but it is not working.
I am not good at Javascript, can someone point me out?

Code:
function filterArrNumberByCol(qMultiOpt, qArray, prevPage) {
 
    // If filter question is on a previous page, hide Q1 and check all "visible" boxes
  if(prevPage == 1) {
    $('#question'+qMultiOpt+' li[id^="javatbd"]:visible input.checkbox').attr('checked', true);
    $('#question'+qMultiOpt+'').hide();
  }
 
  // Assign classes to the answer cells
  $('#question'+qArray+' td.answer-item').each(function(i){
    var classArr = $(this).attr('class').split('answer_cell_00');
    classArr = classArr[1].split(' ');
    var ansCode = classArr[0];
    $(this).addClass('ans-'+ansCode+' filtered');
  });
 
  // Assign classes to the answer label cells
  $('#question'+qArray+' table.subquestions-list tbody tr:eq(0) td.answer-item').each(function(i){
    var classArr2 = $(this).attr('class').split(' ans-');
    var ansCode2 = classArr2[1];
    $('#question'+qArray+' table.subquestions-list thead tr:eq(0) th:eq('+i+')').addClass('ans-'+ansCode2+'');
  });
 
  // Fire the filter function on page load
  filterArr(qMultiOpt, qArray);
 
  // Listener on multi-opt checkboxes to fire the filter function
  $('#question'+qMultiOpt+' input.checkbox').click(function(){
    filterArr(qMultiOpt, qArray);
  });
 
  // On submit, clear all hidden checkboxs of array
  $('#movenextbtn, #movesubmitbtn').click(function(){
    $('#question'+qArray+' td.filtered:hidden').each(function(i){
        $('input.checkbox', this).prop('checked', false);
    });
    return true;
  });
}
 
function filterArr(qMultiOpt, qArray) {
 
  if($('#question'+qMultiOpt+' input.checkbox:checked').length < 1) {
    // Hide the array if no multi-opt options are checked
    $('#question'+qArray+'').hide();
  }
  else {
    $('#question'+qArray+'').show();
 
    // Hide all columns of array
    $('#question'+qArray+' table.subquestions-list tbody td.answer-item, #question'+qArray+' table.question thead th').hide();
 
    // Loop through multi-opt checkboxes and, if checked, show corresponding column of array
    $('#question'+qMultiOpt+' input.checkbox').each(function(i){
      if($(this).prop('checked') === true) {
        var classArr3 = $(this).attr('id').split('X'+qMultiOpt);
        var ansCode3 = classArr3[1];
        $('#question'+qArray+' .ans-'+ansCode3+'').show();
      }
    });
  }
}
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
7 years 6 months ago - 7 years 6 months ago #141891 by DenisChenu
Replied by DenisChenu on topic HowTo Filter the Columns of an Array (Numbers)
Did you look at my post and try the plugin : limesurvey.sondages.pro/974296

Stil some cosmetic issue, but still working .

For remind : framagit.org/SondagePro-LimeSurvey-plugin/hideEmptyColumn

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.
Last edit: 7 years 6 months ago by DenisChenu. Reason: Update link
The following user(s) said Thank You: ericwu
The topic has been locked.
More
7 years 6 months ago #141893 by ericwu
Thank you Denis.
This is very helpful.
The topic has been locked.
More
7 years 2 months ago #146776 by Haap
Hi all,

I was looking into this, because the built-in filters for Array (Numbers) questions don't seem to work.

It might be just me, but I am running into a problem using this plugin as well. When using the plugin (and also when lookint at Denis' sample site) I am unable to correctly hide the empty columns. I am running the latest LimeSurvey (2.58.0+ 20170104).

Please see the attached screenshot.



This is especially annoying when using Mandatory questions ;-). So any help on how to filter the Array (numbers) question type is appreciated.

Cheers, Haap
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
7 years 2 months ago #146862 by DenisChenu
Replied by DenisChenu on topic HowTo Filter the Columns of an Array (Numbers)

Haap wrote: ....and also when lookint at Denis' sample site....

It's not my sample website, it's my dev website. Updated to git each night.

Plugin was deactivated, work again.

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 topic has been locked.

Lime-years ahead

Online-surveys for every purse and purpose