Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #5604 (new defect)

Opened 2 years ago

Last modified 4 months ago

Slider: problem with positionning with non fully positive ranges

Reported by: cyrille.berliat@gmail.com Assigned to: Rails
Priority: high Milestone:
Component: script.aculo.us Version:
Severity: normal Keywords: slider,range
Cc:

Description (Last modified by bitsweat)

When putting a range/some values starting under 0, the items set by default values to '0' are positionned on the first value of the range. Here is an example :

  <script type="text/javascript">
  // <![CDATA[
    var tx_ameosdemoformidable050_pi1_family_dangerousness_ = new Control.Slider(
      ['tx_ameosdemoformidable050_pi1_family_dangerousness_-slider-handle','tx_ameosdemoformidable050_pi1_family_dangerousness_-slider-grad--1','tx_ameosdemoformidable050_pi1_family_dangerousness_-slider-grad-0','tx_ameosdemoformidable050_pi1_family_dangerousness_-slider-grad-1','tx_ameosdemoformidable050_pi1_family_dangerousness_-slider-grad-2','tx_ameosdemoformidable050_pi1_family_dangerousness_-slider-grad-3','tx_ameosdemoformidable050_pi1_family_dangerousness_-slider-grad-4','tx_ameosdemoformidable050_pi1_family_dangerousness_-slider-grad-5'],'tx_ameosdemoformidable050_pi1_family_dangerousness_-slider',{
        sliderValue:[2,-1,0,1,2,3,4,5], range:$R(-1,5),
        values:[-1,0,1,2,3,4,5],
		disabled:false,
		axis:'vertical',
		onChange:function(v){$('tx_ameosdemoformidable050_pi1_family[dangerousness]').value=v[0];}});
  // ]]>
  </script>

My third slider (sliderValue:[2,-1,0,1,2,3,4,5]) which value is 0 is positionned on '-1'

Change History

07/05/06 17:37:11 changed by bitsweat

  • description changed.

03/14/08 13:50:41 changed by pwnedd

I can confirm that this problem still exists in version 1.8.1 of Scriptaculous. Here is another examples which breaks for me:

  new Control.Slider('handle', 'track', {
                range: $R(-10,10),
                values: $R(-10,10),
                sliderValue: 0, // won't work if set to 0
                onSlide: function(value) {console.log("value: " + value);}
                });

The problem is caused by an expression in the Slider constructor:

Slider.js:77

slider.setValue(parseFloat(
        (Object.isArray(slider.options.sliderValue) ? 
          slider.options.sliderValue[i] : slider.options.sliderValue) || 
         slider.range.start), i);

If the value is set to 0, then the part to the left of the "" will eval to 0 = false, and thus the slider.range.start is returned instead.

Hope this helps, Keith