Solved

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

Posted on 2009-07-05
12
589 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:Richard Quadling
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:Richard Quadling
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
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: 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:Richard Quadling
ID: 24784167
Can you show me a URL?
0
 
LVL 40

Expert Comment

by:Richard Quadling
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
 

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:Richard Quadling
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:
Richard Quadling 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:Richard Quadling
ID: 24786041
Sorry it took so long, but glad to have helped.
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

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

Suggested Solutions

Introduction HyperText Transfer Protocol (http://www.ietf.org/rfc/rfc2616.txt) or "HTTP" is the underpinning of internet communication.  As a teacher of web development I have heard many questions, mostly from my younger students who have come to t…
PROBLEM: The other day I was working on adding an ajax request to a webpage that already had a dialog box on the page.  The dialog box was using relative positioning to be positioned next to a form field I had on the page.  Everything was working…
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…

815 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

8 Experts available now in Live!

Get 1:1 Help Now