Solved

jquery ui slider problem, ui.value passes number rather than text value.

Posted on 2009-07-05
12
588 Views
Last Modified: 2013-11-11
hi there, im using jquery ui to create my sliders from a select input. My code works in that it calls a function everytime the slider value changes but ui.value only passes the numerical value of the option rather than the the actual value of the select box, how do i fix this?

my code:

$('#budget').selectToUISlider({
labels: 0,
sliderOptions: {
change:function(e, ui) {
paging('1', '','','1', ui.value , '','' , '');
}
}
});


<select name="budget" id="budget">
  <option value="option1" selected="selected">All</option>
  <option value="option2">asd</option>
  <option value="option3" >dfsdf</option>
  <option value="">sdfsdf</option>
</select>
EXAMPLE: looking at the select above, i want the code to pass the value "option1" to my function, however ui.value only passes "1" while otion 2 passes "2" and so on.

Slider resources:
http://www.filamentgroup.com/lab/update_jquery_ui_slider_from_a_select_element_now_with_aria_support/

http://jqueryui.com/demos/slider/
0
Comment
Question by:cookiejest
  • 7
  • 5
12 Comments
 
LVL 40

Expert Comment

by:RQuadling
ID: 24779392
I don't know jQuery, but I'm assuming the value is the index of the option, so, try ...

$('#budget').option(ui.value).value
0
 

Author Comment

by:cookiejest
ID: 24779539
thats what i thought but paging('1', '','','1', $('#budget').option(ui.value).value , '','' , ''); does not work?!
0
 
LVL 40

Expert Comment

by:RQuadling
ID: 24779572
Can you try ...


change:function(e, ui) {
alert(ui);
alert(ui.value);
paging('1', '','','1', ui.value , '','' , '');
}


Oh. Is it ...

paging('1', '','','1', $('#budget').options(ui.value).value , '','' , '');


option_S_

0
 

Author Comment

by:cookiejest
ID: 24781221
tried that but it didnt work, ive been looking at the slider ui documentation, i think it might be one of the methods but im not sure how to implement them.

    .slider( 'option' , optionName , [value] )

or maybe

    .slider( 'value' , [value] )

http://jqueryui.com/demos/slider/#method-option
0
 
LVL 40

Expert Comment

by:RQuadling
ID: 24784167
Can you show me a URL?
0
 
LVL 40

Expert Comment

by:RQuadling
ID: 24784231
Can you change ...

paging('1', '','','1', ui.value , '','' , '');

to

alert(ui.value); // Should be the value.

Does the value change appropriately?

If so, change this to ...

alert(parseInt(ui.value)); // Should still be the value but as a number rather than a string.
alert($('#budget').name); // Should be budget.
alert($('#budget').options); // Should be an array.
alert($('#budget').options(parseInt(ui.value,10)); // Should be an option object.
alert($('#budget').options(parseInt(ui.value,10).value); // Should be the value for the option.

.slider('option', ...) is about getting the SLIDER's options, not the SELECT's <option>'s.

0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 

Author Comment

by:cookiejest
ID: 24785395
hi there thank you for responding,

alert(ui.value); works

alert(parseInt(ui.value)); works

all the rest resturn "undefined".
0
 
LVL 40

Expert Comment

by:RQuadling
ID: 24785441
Right. Can you show me the complete HTML source? Ideally an online link.

I use prototype, not jquery, so my syntax may be off.

With $('#budget') I want to get the select which id is 'budget'.

Then I want to find the options property (which is the list of options on the select).

Then I want to find the specific option as specified by ui.value.

Then I want to find the value attribute for that option.

0
 

Author Comment

by:cookiejest
ID: 24785513
Here is the full html, im sorry but i cannot provide an online link at the moment!
<script type="text/javascript"> 

 $(function(){

 

 

$('#posted').selectToUISlider({

labels: 0,

sliderOptions: {

change:function(e, ui) {

//alert(parseInt(ui.value)); // Should still be the value but as a number rather than a string.

alert($('#posted').name); // Should be budget.

//alert($('#posted').options); // Should be an array.

//alert($('#posted').options(parseInt(ui.value,10)); // Should be an option object.

//alert($('#posted').options(parseInt(ui.value,10).value); // Should be the value for the option.

 

//paging('1', '','','1', '', ui.value , '', '');

}

}

}); 

}); 
 

</script> 
 

<select name="posted" id="posted"> 

  <option value="" selected="selected">All</option> 

  <option value="1246804007"> Less than 24 Hours ago</option> 

  <option value="1246717607" >Less than 2 days ago</option> 

  <option value="1246631207">Less than 3 days ago</option> 

  <option value="1246544807">Less than 4 days ago</option> 

  <option value="1246458407">Less than 5 days ago</option> 

  <option value="1246372007">Less than 6 days ago</option> 

  <option value="1246285607">Less than 7 days ago</option> 

  <option value="1245680807">Less than 2 weeks ago</option> 

</select> 

Open in new window

0
 
LVL 40

Accepted Solution

by:
RQuadling earned 500 total points
ID: 24785820
Hi.

Got it working.

Change the locations of the JS files.

I didn't get a slider (not sure what you need for that).

It didn't look nice in FF or Chrome, but the selecting worked in FF (I just wanted the debugs).

Run the script below in Firefox with Firebug.


Essentially, the important bit is ...

$('#posted')[0].options[parseInt(ui.value,10)].text

or

$('#posted')[0].options[parseInt(ui.value,10)].value

depending upon what you want to use.
<html>

<head>

<script type="text/javascript" src="file:///Z:/slider/js/jquery-1.3.2.min.js"></script>

<script type="text/javascript" src="file:///Z:/slider/js/jquery-ui-1.7.1.custom.min.js"></script>

<script type="text/javascript" src="file:///Z:/slider/js/selectToUISlider.jQuery.js"></script>

</head>

<body>

<select name="posted" id="posted"> 

  <option value="" selected="selected">All</option> 

  <option value="1246804007"> Less than 24 Hours ago</option> 

  <option value="1246717607" >Less than 2 days ago</option> 

  <option value="1246631207">Less than 3 days ago</option> 

  <option value="1246544807">Less than 4 days ago</option> 

  <option value="1246458407">Less than 5 days ago</option> 

  <option value="1246372007">Less than 6 days ago</option> 

  <option value="1246285607">Less than 7 days ago</option> 

  <option value="1245680807">Less than 2 weeks ago</option> 

</select>

<script type="text/javascript">

$

    (

    function()

        {

        $('#posted')

            .selectToUISlider

                (

                    {

                    labels: 0,

                    sliderOptions:

                        {

                        change:function(e, ui)

                            {

                            console.info('parseInt(ui.value, 10)', parseInt(ui.value));

                            console.info('#posted[0]', $('#posted')[0]);

                            console.info('#posted[0].name', $('#posted')[0].name);

                            console.info('#posted[0].options', $('#posted')[0].options);

                            console.info('#posted[0].options[parseInt(ui.value, 10)]', $('#posted')[0].options[parseInt(ui.value,10)]);

                            console.info('#posted[0].options[parseInt(ui.value, 10)].value', $('#posted')[0].options[parseInt(ui.value,10)].value);

                            console.info('#posted[0].options[parseInt(ui.value, 10)].text', $('#posted')[0].options[parseInt(ui.value,10)].text);

                            }

                        }

                    }

                );

        }

    ); 

</script> 

</body>

</html>

Open in new window

0
 

Author Closing Comment

by:cookiejest
ID: 31599896
thats exactly what i needed and I think it will help many others as well!
0
 
LVL 40

Expert Comment

by:RQuadling
ID: 24786041
Sorry it took so long, but glad to have helped.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

What is a Lightbox? A Lightbox is the effect you see when you click, for example, an image and the screen fades out and up pops the same image but in its full size dimensions. There are lots of Lightbox effects for jQuery. Problem is they are a…
I found this questions asking how to do this in many different forums, so I will describe here how to implement a solution using PHP and AJAX. The logical flow for the problem should be: Write an event handler for the first drop down box to get …
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now