Jquery Mobile Slider change event

删除回忆录丶 提交于 2019-11-30 03:25:19

问题


I have a jquery mobile slider on a simple page. When I drag the slider, the value updates as expected in the textbox. I have looked but cannot find where this logic is happening.

What I would like, is to pass the value into a javascript function. How can I bind the change event to my function?

Cheers

Mike.

Code below - please ignore some nasty hacks:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8" />
        <title>jQuery Mobile Docs - Forms</title>
        <link rel="stylesheet" href="fader/jquery.mobile-1.0a3.css" />
        <script type="text/javascript" src="fader/jquery-1.5.js"></script>
        <script type="text/javascript" src="fader/jquery.mobile-1.0a3.js"></script>
        <script>
            $('#slider-1').changed(function () {
                alert("Test");
            });
        </script>
        <style type="text/css">
            .toolbar {
                -webkit-box-sizing: border-box;
                border-bottom: 1px solid #000;
                padding: 10px;
                height: 45px;
                background: url(fader/Resources/Themes/JQT/img/toolbar.png) #000000 repeat-x;
                position: relative;
            }
            .toolbar > h1 {
                position: absolute;
                overflow: hidden;
                left: 50%;
                top: 10px;
                line-height: 1em;
                margin: 1px 0 0 -75px;
                height: 40px;
                font-size: 20px;
                width: 150px;
                font-weight: bold;
                text-shadow: rgba(0, 0, 0, 1) 0 -1px 1px;
                text-align: center;
                text-overflow: ellipsis;
                white-space: nowrap;
                color: #fff;
            }
            .button, .back, .cancel, .add {
                position: absolute;
                overflow: hidden;
                top: 8px;
                right: 10px;
                margin: 0;
                border-width: 0 5px;
                padding: 0 3px;
                width: auto;
                height: 30px;
                line-height: 30px;
                font-family: inherit;
                font-size: 12px;
                font-weight: bold;
                color: #fff;
                text-shadow: rgba(0, 0, 0, 0.5) 0px -1px 0;
                text-overflow: ellipsis;
                text-decoration: none;
                white-space: nowrap;
                background: none;
                -webkit-border-image: url(fader/Resources/Themes/JQT/img/button.png) 0 5 0 5;
            }
            body > * {
                background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#1e1f21), to(#272729));
            }
            .back {
                left: 6px;
                right: auto;
                padding: 0;
                max-width: 55px;
                border-width: 0 8px 0 14px;
                -webkit-border-image: url(fader/Resources/Themes/JQT/img/back_button.png) 0 8 0 14;
            }
            .back.active {
                -webkit-border-image: url(Fader%20Test%20-%20Trade%20show/img/back_button_clicked.png) 0 8 0 14;
                color: #aaa;
            }
            h1, h2 {
                font: bold 18px Helvetica;
                text-shadow: rgba(255, 255, 255, .2) 0 1px 1px;
                color: #FFF;
                margin: 10px 20px 5px;
            }
            body {
                background: #000;
                color: #ddd;
            }
        </style>
    </head>

    <body>
        <div class="ui-body-a" data-role="page">
            <div class="toolbar">
                 <h1>Input</h1>

                 <A class="back" HREF="javascript:javascript:history.go(-1)">Home</A

                    ></div>





  <form action="#" method="get">


            <div class="ui-body-a" data-role="fieldcontain">

              <h1>Lighting Intensity</h1>
              <input type="range" name="slider-1" id="slider-1" value="0" min="0" max="100" data-theme="b" data-track-theme="a" orientation="vertical" />



            </div>

    </form>

    </div><!-- /content -->
</div><!-- /page -->

</body>
</html>

回答1:


Michael. Try to surround the slider with another element:

<div id="div-slider">
  <input type="range" id="slider-1" />
</div>

And you can get an event on change:

$("#div-slider").change(function() {
  var slider_value = $("#slider-1").val();
  // do something..
});



回答2:


The problem with your code is that the javascript binding the event of change to the elements is evaluated before they were actually created in the html, thus no element get binded to the change event as you specified.

Try this:

$('#slider-1').live('change', function(){
  doYourStuffHere();
});

Briefly, live means that JQuery will keep on binding events to elements matching the specified selector even if they were not present at time of evaluating the JS for binding, so this code will bind all present and future html elements which match #slider-1 selector with the proper change callback.

Another alternative is to use JQuery 'on' binding which acts little bit differently, but can still do the job. Have a look at the documentation for 'on' here.




回答3:


I highly suggest checking out w3schools tutorial on this.

http://www.w3schools.com/jquerymobile/jquerymobile_events_intro.asp

The crucial piece of code that you are missing is:

$(document).on("pageinit","#pageone",function(){
    // PLACE ALL YOU EVENTS CODE HERE e.g.
    $( "#slider" ).on( 'slidestop', function( event ) { 
        alert ('hi');  
    });
}

Make sure your content is prefixed with:

<div data-role="page" id="pageone">
<div data-role="content">
<input type="range" name="slider" id="slider" value="10" min="0" max="100">
</div>
</div>



回答4:


Use this code,

$( ".mySliders" ).slider({
    create: function (event, ui) {
        $(this).bind('change', function () {

        });
    }
});

Do not put type="range" to your input tags, put type="text" instead.

Since you are calling slider function manually.




回答5:


The documentation appears to be lacking. After searching for a long time I found that to get the new value in the event handler, something like $(this).slider().val() is needed (the extra slider() being the part omitted almost everywhere):

$("#div-slider").change(function() {
  var slider_value = $(this).slider().val();
  // do something..
});



回答6:


I had the same problem, too many troubles with the event of the slider. Finally I found 'slidestop' event that works great. This is the code:

$( "#slider-1").on('slidestop', function( event ) {
   var slider_value=$("#slider-1").slider().val();
   alert('Value: '+slider_value);
});

I hope this work for you




回答7:


I'm not too familiar with jquery mobile, but adding a change handler to the original input element should do:

$('#slider-1').change(function(){
    var slider_value = $(this).val()
    console.log(slider_value)
    // do whatever you want with that value...
})

Hope this help,

Martin




回答8:


try this:

var self = this;
this.sliderTouchUp = function() {
    var currentVal = $('#slider-1').val();
    console.log("val change to " + currentVal);
};
$('.ui-slider').live('mouseup', self.sliderTouchUp);
$('.ui-slider').live('touchend', self.sliderTouchUp);



回答9:


Shortest yet and functional.

$('body').change(function() {
    var slider_value = $('#slider-1').val();
    if(slider_value == 4000){   
        alert("Holy smoke!");
    }
}



回答10:


i'm using this code and it works in jquery mobile 1.4.3.

$(".ui-slider").on('change', function(event) { 
    var valuenow = $(this).find(".ui-slider-handle").attr("aria-valuenow");
    console.log(valuenow);
});


来源:https://stackoverflow.com/questions/5501536/jquery-mobile-slider-change-event

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!