Welcome to the LimeSurvey Community Forum

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

Array number with Filter option needs one column with formula

More
10 years 1 month ago #104251 by pmp
Hello,

I am new to this and found very interesting . I am trying to setup a evaluation survey. I have added two questions. q1 a multiple choice type and second question is Array Numbers with filter condition on Q1.with subquestions Y Scale 3 Sub questions SQ0001-SQ0003 and X scale 5 Sub questions SQ0001 to SQ0005. Now SQ0005 needs to calculate automatically based on the formula. How Can i achieve this. I saw many posting, but i am not sure how to get this done.

Would appreciate any help
Attachments:
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
10 years 1 month ago #104261 by tpartner
You will need to use JavaScript to automatically load those inputs.

1) Set up your survey to use JavaScript .

2) Add this script to the source of the array.

Code:
<script type="text/javascript" charset="utf-8">  
 
  $(document).ready(function(){
    var thisQuestion = $('#question{QID}');
 
    // Add some classes for manipulation
    $('tr.subquestions-list', thisQuestion).each(function(i){
      $('> *', this).each(function(i){
        $(this).addClass('col-'+i+'');
      });
    });
    $('.col-2 input[type="text"]', thisQuestion).addClass('final');
    $('.col-3 input[type="text"]', thisQuestion).addClass('percent');
    $('.col-4 input[type="text"]', thisQuestion).addClass('rating');
 
    // Disable the "Rating" inputs
    $('input.rating', thisQuestion).prop('disabled', true);
 
    // Listeners on the "Final" and "Percent" inputs
    $('input.final, input.percent', thisQuestion).change(function(event) {
      handleRating(this);
    });
    $('input.final, input.percent', thisQuestion).keyup(function(event) {
      handleRating(this);
    });    
    function handleRating(thisInput) {
      var thisRow = $(thisInput).closest('tr.subquestions-list');
      var thisFinal = $('input.final', thisRow).val();
      var thisPercent = $('input.percent', thisRow).val();
      if(thisFinal != '' &amp;&amp; thisPercent != '') {
        $('input.rating', thisRow).val(thisFinal * thisPercent / 100)
      }
      else {
        $('input.rating', thisRow).val('');
      }
    }
 
    // Re-enable the "Rating" inputs on submit
    $('form#limesurvey').submit(function(){      
      $('input.rating', thisQuestion).prop('disabled', false);
    });
  });
 
</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: pmp
The topic has been locked.
More
10 years 1 month ago #104304 by pmp
This is sweet. It worked- I couldn't imagine we have such huge possibilities of this tool.
I luv it :cheer:

Thanks a lot for helping me in this
PMP
The topic has been locked.
More
10 years 1 month ago #104310 by pmp
Is there a way I can get the Total of the last column. I am not getting the total option enable as it is array Numbers type.
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
10 years 1 month ago #104317 by tpartner
Can you provide a screenshot or mockup?

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
10 years 1 month ago #104321 by pmp
Attached the mockup-
Appreciate your help-
Attachments:
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
10 years 1 month ago #104323 by tpartner
Okay, I get it.

Do you need this recorded in the data or is it just a visual for the respondent?


.

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
10 years 1 month ago #104328 by pmp
this is to be recorded-
Thanks
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
10 years 1 month ago #104354 by tpartner
Okay, in that case, I would add another sub-question to the array - "Total".

Then use this script instead of the one above. In addition to previous functionality, it will:
- Hide the first 3 inputs in the "Total" row
- Dynamically load the column totals into the "Total" inputs
Code:
<script type="text/javascript" charset="utf-8">  
 
  $(document).ready(function(){
    var thisQuestion = $('#question{QID}');
    var qID = {QID};
 
    // Add some classes for manipulation
    $('tr.subquestions-list', thisQuestion).each(function(i){
      $('> *', this).each(function(i){
        $(this).addClass('col-'+i+'');
      });
    });
    $('tr.subquestions-list:last', thisQuestion).addClass('last');
    $('tr.subquestions-list:not(.last) .col-2 input[type="text"]', thisQuestion).addClass('final');
    $('tr.subquestions-list:not(.last) .col-3 input[type="text"]', thisQuestion).addClass('percent');
    $('tr.subquestions-list:not(.last) .col-4 input[type="text"]', thisQuestion).addClass('rating');
 
    // Disable the "Rating" inputs
    $('input.rating', thisQuestion).prop('disabled', true);
 
    // Hide the unwanted total inputs
    $('tr.subquestions-list.last input[type="text"]:not(:last)', thisQuestion).hide();
 
    // Initial totals
    $('tr.subquestions-list.last input[type="text"]', thisQuestion).val(0).prop('disabled', true);
    var lastRowCode = $('tr.subquestions-list:last', thisQuestion).attr('id').split('X'+qID)[1];
 
    // Listeners on the "Final" and "Percent" inputs
    $('input.final, input.percent', thisQuestion).change(function(event) {
      handleRating(this);
    });
    $('input.final, input.percent', thisQuestion).keyup(function(event) {
      handleRating(this);
    });    
    function handleRating(thisInput) {
      var thisRow = $(thisInput).closest('tr.subquestions-list');
      var thisFinal = $('input.final', thisRow).val();
      var thisPercent = $('input.percent', thisRow).val();
      if(thisFinal != '' &amp;&amp; thisPercent != '') {
        $('input.rating', thisRow).val(thisFinal * thisPercent / 100)
      }
      else {
        $('input.rating', thisRow).val('');
      }
    }
 
    // Listeners on the inputs to load totals
    $('tr.subquestions-list:not(.last) input[type="text"]:not(.rating)', thisQuestion).change(function(event) {
      handleTotals();
    });
    $('tr.subquestions-list:not(.last) input[type="text"]:not(.rating)', thisQuestion).keyup(function(event) {
      handleTotals();
    });  
    function handleTotals() {
      $('tr.subquestions-list.last input[type="text"]', thisQuestion).each(function(i) {
        var thisCode = $(this).attr('id').split('X'+qID+lastRowCode+'_')[1];
        var newTotal = 0;
        $('tr.subquestions-list:not(.last) input[type="text"][id$="_'+thisCode+'"]', thisQuestion).each(function(i) {
          if($.isNumeric($(this).val())) {
            newTotal = newTotal + Number($(this).val());
          }
        });
        $(this).val(newTotal);
      });
    }
 
    // Re-enable the "Rating" inputs on submit
    $('form#limesurvey').submit(function(){      
      $('input.rating, tr.subquestions-list.last input[type="text"]', thisQuestion).prop('disabled', false);
    });
  });
 
</script>




.

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
10 years 1 month ago #104356 by pmp
Yesss. It worked.
Thank you verymuch, this is an awsome tool. No doubt.
The topic has been locked.
More
10 years 1 month ago #104855 by pmp
I am just trying to figureout how to add the validation on the 'Self ' column - exepected value between 1 and 5 and the % column totals ( for all the rows) should not exceed 100. I tried giving it in the question validation but it didnt work.

Any help would be highly appreciated.

Thanks
PMP
The topic has been locked.
More
10 years 1 month ago #104881 by pmp
is there a way I can set validation on Self ( each cell) like value should be between 1 to 5 and % total should not be more that 100%?

I tried using the sub question /question validation option and it didnt work. any help would be appreciated
The topic has been locked.

Lime-years ahead

Online-surveys for every purse and purpose