Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1
  • 2

TOPIC: Array number with Filter option needs one column with formula

Array number with Filter option needs one column with formula 2 months 3 weeks ago #104251

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

Array number with Filter option needs one column with formula 2 months 3 weeks ago #104261

  • tpartner
  • tpartner's Avatar
  • NOW ONLINE
  • LimeSurvey Team
  • Posts: 3814
  • Thank you received: 683
  • Karma: 328
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.

<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 != '' && 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.

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: pmp

Array number with Filter option needs one column with formula 2 months 3 weeks ago #104304

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

Array number with Filter option needs one column with formula 2 months 3 weeks ago #104310

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

Array number with Filter option needs one column with formula 2 months 3 weeks ago #104317

  • tpartner
  • tpartner's Avatar
  • NOW ONLINE
  • LimeSurvey Team
  • Posts: 3814
  • Thank you received: 683
  • Karma: 328
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.

LimeSurvey is open-source and run entirely by volunteers so please consider donating to support the project.
The administrator has disabled public write access.

Array number with Filter option needs one column with formula 2 months 3 weeks ago #104321

  • pmp
  • pmp's Avatar
  • OFFLINE
  • Junior Lime
  • Posts: 20
  • Karma: 0
Attached the mockup-
Appreciate your help-
Attachments:
The administrator has disabled public write access.

Array number with Filter option needs one column with formula 2 months 3 weeks ago #104323

  • tpartner
  • tpartner's Avatar
  • NOW ONLINE
  • LimeSurvey Team
  • Posts: 3814
  • Thank you received: 683
  • Karma: 328
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.

LimeSurvey is open-source and run entirely by volunteers so please consider donating to support the project.
The administrator has disabled public write access.

Array number with Filter option needs one column with formula 2 months 3 weeks ago #104328

  • pmp
  • pmp's Avatar
  • OFFLINE
  • Junior Lime
  • Posts: 20
  • Karma: 0
this is to be recorded-
Thanks
The administrator has disabled public write access.

Array number with Filter option needs one column with formula 2 months 2 weeks ago #104354

  • tpartner
  • tpartner's Avatar
  • NOW ONLINE
  • LimeSurvey Team
  • Posts: 3814
  • Thank you received: 683
  • Karma: 328
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
<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 != '' && 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>


Capture_2014-01-31.png


.
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.

Array number with Filter option needs one column with formula 2 months 2 weeks ago #104356

  • pmp
  • pmp's Avatar
  • OFFLINE
  • Junior Lime
  • Posts: 20
  • Karma: 0
Yesss. It worked.
Thank you verymuch, this is an awsome tool. No doubt.
The administrator has disabled public write access.
  • Page:
  • 1
  • 2
Moderators: ITEd
Time to create page: 0.170 seconds
Donation Image