Welcome, Guest
Username: Password: Remember me

TOPIC: Slider Question in reverse order

Slider Question in reverse order 2 months 2 days ago #111692

Hi,

I have a question "Multiple numerical input" which I am using as Slider. Currently the slider is displayed as 0 - 5. What I want to do is to display the slider from 5 - 0. Can you please suggest how can I do this.

Prompt response would be greatly appreciated.

Thanks in advance.
The administrator has disabled public write access.

Slider Question in reverse order 2 months 2 days ago #111697

  • holch
  • holch's Avatar
  • OFFLINE
  • LimeSurvey Team
  • Posts: 2817
  • Thank you received: 353
  • Karma: 121
First of all: You don't need to write "prompt response would be greatly appreciated". It will not gonna be responded faster this way. If people have an answer, they'll give it to you. If not, not.

Now to your issue: How about writing 5 into slider minimum value and 1 into slider maximum value?
It shows correct for me, but I face one problem: The slider can't be moved. When I go for 1-5 instead 5-1 the slider seems to work fine.
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.

Slider Question in reverse order 2 months 1 day ago #111717

  • Mazi
  • Mazi's Avatar
  • OFFLINE
  • LimeSurvey Team
  • Posts: 5325
  • Thank you received: 296
  • Karma: 249
Sliders always go from left/min to right/max and thus holch's idea doesn't work because 5 > 1 -> wrong min/max.

Instead, use an array question with a blank sub question and add answer 5 - ... - 1.

Best regards/Beste Grüße,
Dr. Marcel Minke
(Limesurvey Head of Support)
Need Help? We offer professional Limesurvey support
Contact: marcel.minke(at)limesurvey.org'"
The administrator has disabled public write access.

Slider Question in reverse order 2 months 1 day ago #111729

  • tpartner
  • tpartner's Avatar
  • OFFLINE
  • LimeSurvey Team
  • Posts: 4256
  • Thank you received: 801
  • Karma: 367
There is no "reverse slide" functionality for the jQuery UI slider but it can be mimicked by replacing the slide function and subtracting the slider value from the slider maximum.

Of course, we would also need to handle things like the show-min, show-max, steps, and decimal places in the accuracy.

So, here's a quick workaround with the following caveats:
- Developed for LS 2.05
- Only tested in IE7-10, Firefox and Chrome
- The "Reset" button will not work

1) Add the following function to the end of template.js:
function reverseSlider(qID) {
 
	// Identify the question
	var thisQuestion = $('#question'+qID);
 
	//$('span.input', thisQuestion).show() // un-comment this to debug
 
	// Reverse the min/max displays
	$('.answer-item', thisQuestion).each(function(i) {
		var showMinText = $('.slider-showmin', this).text();
		var showMaxText = $('.slider-showmax', this).text();
		$('.slider-showmin', this).text(showMaxText);
		$('.slider-showmax', this).text(showMinText);
	});
 
	// Initial slider positions
	$('span.input input[type="text"]', thisQuestion).each(function(i) {
 
		if($(this).val() != '') {				
			var thisRow = $(this).closest('li.answer-item');				
			var thisSlider = $('.ui-slider', thisRow);
			var sliderValue = $(thisSlider).slider('option', 'max')+$(thisSlider).slider('option', 'min')-$(this).val();
			$('.ui-slider', thisRow).slider('option', 'value', sliderValue);
			$('.slider-callout', thisRow).text($(this).val()); 
		}
	});
 
	// New slide function
	$('.ui-slider', thisQuestion).slider( 'option', 'slide', function(event, ui) {		
		// Define a few vars
		var thisRow = $(this).closest('li.answer-item');
		var thisSlider = $(this);
		var step = $(thisSlider).slider('option', 'step').toString();
		var stepDecimals = '';
		if(step.indexOf('.') != -1) {
			stepDecimals = step.length - (step.indexOf('.')+1);
		}
		var reverseValue = '';
 
		// Calculate the "reverse" value
		if(ui.value > $(thisSlider).slider('option', 'max')) {
			reverseValue = $(thisSlider).slider('option', 'min');
		}
		else if(ui.value < $(thisSlider).slider('option', 'min')) {
			reverseValue = $(thisSlider).slider('option', 'max');
		}
		else if(stepDecimals > 0) { // Handle decimal places
			reverseValue = ($(thisSlider).slider('option', 'max')+$(thisSlider).slider('option', 'min')-ui.value).toFixed(stepDecimals);
		}
		else{
			reverseValue = $(thisSlider).slider('option', 'max')+$(thisSlider).slider('option', 'min')-ui.value;
		}
		reverseValue = reverseValue.toString();
		reverseValue = reverseValue.replace(/\./,LSvar.sLEMradix);
 
		// Load the callout
		$('.slider_callout', thisRow).text(reverseValue);
 
		// Set the data value
		$('input.text', thisRow).val(reverseValue);
		$('input.text', thisRow).triggerHandler("keyup");
	});
}

2) Add this script to the source of every question you want to "reverse":
<script type="text/javascript" charset="utf-8">	
    $(document).ready(function() { 	
		reverseSlider({QID});
	});
</script>

Capture_2014-08-18.jpg
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.

Slider Question in reverse order 2 months 1 day ago #111732

  • Mazi
  • Mazi's Avatar
  • OFFLINE
  • LimeSurvey Team
  • Posts: 5325
  • Thank you received: 296
  • Karma: 249
Wow, thanks for all your work on this, Tony.

Please add this to the workarounds section of the manual so your valuable work doesn't get lost.

Best regards/Beste Grüße,
Dr. Marcel Minke
(Limesurvey Head of Support)
Need Help? We offer professional Limesurvey support
Contact: marcel.minke(at)limesurvey.org'"
The administrator has disabled public write access.
Moderators: ITEd
Time to create page: 0.149 seconds
Donation Image