Welcome, Guest
Username: Password: Remember me

TOPIC: Dropdownlist as a subquestion depending on first dropdown question

Dropdownlist as a subquestion depending on first dropdown question 2 years 1 month ago #85219

  • hakan
  • hakan's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 1
  • Karma: 0
I would like to have two question like dropdown.

The answer of the first one (you will be able to choose among apr. 100 preeschool) will determine the answering options in the second dropdownlist, which will be max 6 options of departments per preeschool - but of course varying depending on which preeschool that have been choosen in first dropdown.

Yout can see the function here which i've made myself in html and java.

www2.sundsvall.se/enkat/Bou2012/barnomsorgsenkat2012.html

How do you solve that in Limesurvey? I've tried to search but have not found a descent solution.

Thanks in advance!

/Håkan
The administrator has disabled public write access.

Re: Dropdownlist as a subquestion depending on first dropdown question 2 years 1 month ago #85220

  • holch
  • holch's Avatar
  • OFFLINE
  • LimeSurvey Team
  • Posts: 2851
  • Thank you received: 358
  • Karma: 124
You can probably solve this with a custom Javascript, which is probably the best solution when the first dropdown offers many choices.

I solved it once with conditions and different second questions.

In your case that would be probably quite some work.
Have a look at the manual! It is a really valuable source for information. Here some helpful links:
Manual (EN) | Question Types | Question Attributes | Workarounds

If you found this answer helpful and it saved you some time please consider a donation to the project to keep Limesurvey going!
The administrator has disabled public write access.

Re: Dropdownlist as a subquestion depending on first dropdown question 2 years 1 month ago #85276

  • DenisChenu
  • DenisChenu's Avatar
  • OFFLINE
  • Moderator Lime
  • Posts: 6435
  • Thank you received: 840
  • Karma: 249
Hello,

You can use some javascript function:
/* Function to filter a select by another select 
   In the same page
   var qID : the numer of question to filter 
   var filterqID : the number of question filtering
*/
function selectFilterByCode(qID,filterqID){
  $(document).ready(function(){
    var idSelectFilter = $("#question"+qID).find("select").attr('id');
    $("#"+idSelectFilter).hide();
    var idSelectFiltering = $("#question"+filterqID).find("select").attr('id');
    if(typeof idSelectFilter === 'undefined' || typeof idSelectFiltering === 'undefined' )
    { 
      return false;
    }
    else
    {
      var idNewSelectFilter = 'select'+qID
      var NewSelectElement = "<select id='"+idNewSelectFilter+"'><option value=''>"+$("#"+idSelectFilter+" option[value='']:first").text()+"</option></select>";
      $("#"+idSelectFilter).after(NewSelectElement);
      $("#"+idNewSelectFilter).width($("#"+idSelectFilter).width());
      $("#"+idSelectFiltering).change(function(){
        $('#'+idSelectFilter).val('');
        $('#'+idNewSelectFilter).val('');
        var valuefilter=$(this).val();
        $('#'+idNewSelectFilter+' option').not(':first').remove();
        $('#'+idSelectFilter+' option').each(function(){
          if($(this).attr('value').indexOf(valuefilter)==0){
            $(this).clone().appendTo('#'+idNewSelectFilter);
          }
        });
      });
 
      $("#"+idNewSelectFilter).change(function(){
        $('#'+idSelectFilter).val($(this).val());
      });
 
      if($("#"+idSelectFiltering).val()!=''){
        var valuefilter=$("#"+idSelectFiltering).val();
        $('#'+idSelectFilter+' option').each(function(){
          if($(this).attr('value').indexOf(valuefilter)==0){
            $(this).clone().appendTo('#'+idNewSelectFilter);
          }
        });
        if($("#"+idSelectFilter).val()!=''){
           $('#'+idNewSelectFilter).val($("#"+idSelectFilter).val());
        }
      }
    }
  });
}

And use it like that in your survey:
<script type="text/javascript" charset="utf-8">
selectFilterByCode(qID,filterqID);
</script>
wher qID is the question to filter and filterqID the filtering question.

The script is here:
demonstration.sondages.pro/upload/templa...nade/selectfilter.js

The filter is done on the "sub question" code: for example: is the filterqID hare A then the qID show A1,A2,A233 ....

You can see a demo here:
demonstration.sondages.pro/82885/lang-fr (sorry in french)

Denis
The administrator has disabled public write access.

Re: Dropdownlist as a subquestion depending on first dropdown question 1 year 11 months ago #88128

  • lfortunato
  • lfortunato's Avatar
  • OFFLINE
  • Junior Lime
  • Posts: 38
  • Thank you received: 1
  • Karma: 1
Hello Denis!

Your solution is really good,
I've just tried the demo and it works exactly like I would.
I would like to ask you some questions on that...thank you in advance!

I have one first question with type List (dropdown)
with a Category separator (:)
and Question Code = FATH


Answer options
Code Description
A Customer1:Healthy Life
B Customer1:Smart Cities
C Customer1:Alternative energy
D Customer2:Microtechnologies
E Customer2:Nanotechnologies
F Customer3:Innovation


The second question with type List (dropdown)
and Question Code = CHILD

Answer options
Code Description
A1 healthy_food
A2 eating_habits
A3 lifestyle
B1 new_cities
B2 ecological_cities
B3 green_areas
C1 solar_panels
C2 new_fuels
D1 microtech
D2 lithography
D3 optical_lithografy
E1 nanotech
F1 inn_forpeople
F2 inn_forenv

The second question (CHILD) has to display different elements in the dropdown,
based on the previous choice, for example

SELECTED (in the first dropdown)
A Customer1:Healthy Life

THEREFORE WILL BE SHOWN (in the second dropdown)
A1 healthy_food
A2 eating_habits
A3 lifestyle

Following this example, I just need 2 questions dropdown type
instead of 7 questions with conditions for hiding/showing each of them.
Is that correct?

Then I have to put selectfilter.js
in the correct directory, for example
/template/citronade
if I'm using the citronade template.


Regarding the function call
<script type="text/javascript" charset="utf-8">
selectFilterByCode(qID,filterqID);
</script>

where do I have to put this?

Perhaps I have to put the call in the first dropdown question,
in the 'Relevance' field?

Many thanks for all your work :)
The administrator has disabled public write access.

Re: Dropdownlist as a subquestion depending on first dropdown question 1 year 11 months ago #88139

  • DenisChenu
  • DenisChenu's Avatar
  • OFFLINE
  • Moderator Lime
  • Posts: 6435
  • Thank you received: 840
  • Karma: 249
You can do something like that in the 2nd questions source (without xssfilter)
<script type='text/javascript' src='{TEMPLATEURL}selectfilter.js'></script>
<script type="text/javascript" charset="utf-8">
selectFilterByCode({QID},filterqID);
</script>
If you put the js file in the template, just replace filterqID by the number of the 1st question.
Last Edit: 1 year 11 months ago by DenisChenu.
The administrator has disabled public write access.

Re: Dropdownlist as a subquestion depending on first dropdown question 1 year 11 months ago #88596

  • lfortunato
  • lfortunato's Avatar
  • OFFLINE
  • Junior Lime
  • Posts: 38
  • Thank you received: 1
  • Karma: 1
Dear Denis, after many trials still doesn't work :(

Attached you'll find my survey example with only the two questions, one dropdown 'father' question
and one dropdown 'children' question.

I've also attached the file selectfilter.js (the same you posted) , which I've put into the server directory
/templates/bluegrey
because I'm using this kind of template for the survey.

If you have any suggestion... really many thanks to you :)


File Attachment:

File Name: limesurvey_survey_22769.lss
File Size: 26 KB


selectfilter.js
The administrator has disabled public write access.

Re: Dropdownlist as a subquestion depending on first dropdown question 1 year 11 months ago #88597

  • lfortunato
  • lfortunato's Avatar
  • OFFLINE
  • Junior Lime
  • Posts: 38
  • Thank you received: 1
  • Karma: 1
...here is the second file attached

selectfilter.js
The administrator has disabled public write access.

Re: Dropdownlist as a subquestion depending on first dropdown question 1 year 11 months ago #88604

  • DenisChenu
  • DenisChenu's Avatar
  • OFFLINE
  • Moderator Lime
  • Posts: 6435
  • Thank you received: 840
  • Karma: 249
Hello,

I made an error for the inclusion ,
<script type='text/javascript' src='{TEMPLATEURL}selectfilter.js'></script>
and not
<script type='text/javascript' src='{TEMPLATEURL}jqury-ui.js'></script>

Can i have a link for the survey ? It's impossible to see why it's not work without testing.

Denis
Last Edit: 1 year 11 months ago by DenisChenu.
The administrator has disabled public write access.
The following user(s) said Thank You: lfortunato

Re: Dropdownlist as a subquestion depending on first dropdown question 1 year 11 months ago #88647

  • lfortunato
  • lfortunato's Avatar
  • OFFLINE
  • Junior Lime
  • Posts: 38
  • Thank you received: 1
  • Karma: 1
At last, it works! :) :) :)

I want to thank very much Denis for his helpfulness and kindness.
Now It works also with the category separator, and this is exactly what I needed to do!
Good job to all the Limesurvey team!!!
The administrator has disabled public write access.

Re: Dropdownlist as a subquestion depending on first dropdown question 1 year 11 months ago #88665

  • DenisChenu
  • DenisChenu's Avatar
  • OFFLINE
  • Moderator Lime
  • Posts: 6435
  • Thank you received: 840
  • Karma: 249
lfortunato wrote:
At last, it works! :) .... It works also with the category separator,
Great news !

If you have some times to put this workaround on our documentation, it can be great :
docs.limesurvey.org/tiki-index.php?page=...ime+using+Javascript

Denis
The administrator has disabled public write access.
Moderators: ITEd
Time to create page: 0.151 seconds
Donation Image