jQuery UI Slider(以编程方式设置)


78

我想即时修改滑块。我试图通过使用

$("#slider").slider("option", "values", [50,80]);

该调用将设置值,但该元素不会更新滑块位置。呼唤

$("#slider").trigger('change');

也无济于事。

还有另一种/更好的方法来修改值和滑块位置吗?

Answers:


143

这取决于您是否要更改当前范围内的滑块或更改滑块的范围。

如果它是要更改的当前范围内的值,则应使用.slider()方法,但是语法与您使用的有点不同:

$("#slider").slider('value',50);

或者,如果您有一个带有两个手柄的滑块,则为:

$("#slider").slider('values',0,50); // sets first handle (index 0) to 50
$("#slider").slider('values',1,80); // sets second handle (index 1) to 80

如果是您要更改的范围,则为:

$("#slider").slider('option',{min: 0, max: 500});

7
到目前为止,它仍然有效,但是它没有执行事件处理程序。事件处理程序会在滑动时更新一些跨度。看来我无法手动触发幻灯片事件?
jAndy 2010年

1
我尝试了.slider('value',100)和.slider('option','value',100),并且滑块不移动。我误以为应该移动吗?还是只是改变值,我是否必须刷新或实际看到滑块移动的东西?似乎这个答案与我的实际需求非常接近时,我不想问一个重复的问题。
trh178 2011年

2
如果您有范围滑块,则需要使用要移动的手柄的索引整数(起始0)。因此,要将第一个手柄(索引0)移动到50,请使用$(“#slider”)。slider('values',0,50); 如果要将第二个滑块(索引1)移动到50,请使用$(“#slider”)。slider('values',1,50);
alexteg 2011年

4
@jAndy设置滑块值将调用change事件处理程序,而不是slide事件处理程序。
伊戈尔·穆欣

6
您还可以使用以下数组来设置范围滑块:$(“#slider”)。slider('values',[50,80]);
tObi 2014年

15

对我来说,这可以完美触发UI Slider上的slide事件:

hs=$('#height_slider').slider();
hs.slider('option', 'value',h);
hs.slider('option','slide')
       .call(hs,null,{ handle: $('.ui-slider-handle', hs), value: h });

不要忘记hs.slider('option', 'value',h); 在触发之前设置值。其他滑块处理程序将不会与值同步。

这里要注意的一件事h是索引/位置(不是值),以防您使用html select


使用jQuery UI 1.8.24,该解决方案对我来说非常理想。
АлександрФишер

1
对我来说也是如此……仅此解决方案有效。jQuery 1.8.3和jQuery UI 1.9.2我的意思是从@alexteg的答案中,值已正确设置,但滑块没有滑动。
Gaurav Pandey

范围滑块的修改后的脚本将如下所示:$('#minPrice, #maxPrice').blur(function() { var max = parseInt($('#maxPrice').val()); var min = parseInt($('#minPrice').val()); if (min > max) return false; var hs = $("#slider-range"); hs.slider("values", 0, min); hs.slider("values", 1, max); hs.slider('option', 'slide').call(hs, null, {handle: $('.ui-slider-handle', hs), values: [min, max]}); }); 其中#minPrice和#maxPrice是两个文本框。
Gaurav Pandey

8

上面的答案对我都不起作用,也许它们是基于旧版本的框架?

我需要做的就是设置基础控件的值,然后调用refresh方法,如下所示:

$("#slider").val(50);
$("#slider").slider("refresh");

2
这对你有用吗?在文档中找不到有关它的任何内容,我也无法正常工作。
Znarkus

10
报告中Error: no such method 'refresh' for slider widget instance铬错误
萧寒雨

1
适用于JQ 2.1.0 + JQM 1.4.2的安装。
metamagikum

1
多行合一...$("#slider").val(50).slider("refresh");
PaulR 2014年

谢谢你,这对我非常有用。.我为你投票:)
vijay 2015年

5

Mal的答案是唯一对我有用的答案(也许jqueryUI已更改),这是处理范围的一种变体:

$( "#slider-range" ).slider('values',0,lowerValue);
$( "#slider-range" ).slider('values',1,upperValue);
$( "#slider-range" ).slider("refresh");

3

@gaurav解决方案的一部分适用于具有多个滑块的jQuery 2.1.3和JQuery UI 1.10.2。我的项目使用四个range滑块通过此filter.js插件过滤数据。其他解决方案是将滑块句柄重设回其起始端点也很好,但显然他们没有触发filter.js可以理解的事件。所以这是我循环浏览滑块的方式:

$("yourSliderSelection").each (function () {
    var hs = $(this); 
    var options = $(this).slider('option');

    //reset the ui
    $(this).slider( 'values', [ options.min, options.max ] ); 

    //refresh/trigger event so that filter.js can reset handling the data
    hs.slider('option', 'slide').call(
        hs, 
        null, 
        {
            handle: $('.ui-slider-handle', hs),
            values: [options.min, options.max]
        }
    );

});

hs.slider()代码重置数据,但不重置我的方案中的UI。希望这对其他人有帮助。


我必须一直滚动到这里才能获得正确的答案。谢谢。
托马什Zato -恢复莫妮卡

2

可以手动触发如下事件:

将滑块行为应用于元素

var s = $('#slider').slider();

...

设置滑块值

s.slider('value',10);

触发滑动事件,传递ui对象

s.trigger('slide',{ ui: $('.ui-slider-handle', s), value: 10 });

2

如果需要从多个输入更改滑块值,请使用它:

的HTML:

<input type="text" id="amount">
<input type="text" id="amount2">
<div id="slider-range"></div>

js:

    $( "#slider-range" ).slider({
    range: true,
    min: 0,
    max: 217,
    values: [ 0, 217 ],
    slide: function( event, ui ) {
        $( "#amount" ).val( ui.values[ 0 ] );
        $( "#amount2" ).val( ui.values[ 1 ] );
    }
    });

$("#amount").change(function() {
    $("#slider-range").slider('values',0,$(this).val());
});
$("#amount2").change(function() {
    $("#slider-range").slider('values',1,$(this).val());
});

https://jsfiddle.net/brhuman/uvx6pdc1/1/


谢谢,为我节省了很多时间。这是最大范围版本jsfiddle.net/jpcodes/dvumhes1
Jim Padilla

1

我想更新滑块以及输入框。对我来说,下面的工作

a.slider('value',1520);
$("#labelAID").val(1520);

a对象在哪里如下。

 var a= $( "<div id='slider' style='width:200px;margin-left:20px;'></div>" ).insertAfter( "#labelAID" ).slider({
            min: 0,
            max: 2000,
            range: "min",
            value: 111,
            slide: function( event, ui ) {

                $("#labelAID").val(ui.value    );
            }
        });

        $( "#labelAID" ).keyup(function() {
            a.slider( "value",$( "#labelAID" ).val()  );
        });

1

在我的情况下,带有2个句柄的jquery滑块只能按以下方式工作。

$('#Slider').slider('option',{values: [0.15, 0.6]});

-1

在启动或刷新时值= 0(默认值)如何从http请求获取值

 <script>
       $(function() {
         $( "#slider-vertical" ).slider({
    animate: 5000,
    orientation: "vertical",
    range: "max",
    min: 0,
    max: 100,
    value: function( event, ui ) {
        $( "#amount" ).val( ui.value );

  //  build a URL using the value from the slider
  var geturl = "http://192.168.0.101/position";

  //  make an AJAX call to the Arduino
  $.get(geturl, function(data) {

  });
  },
    slide: function( event, ui ) {
        $( "#amount" ).val( ui.value );

  //  build a URL using the value from the slider
  var resturl = "http://192.168.0.101/set?points=" + ui.value;

  //  make an AJAX call to the Arduino
  $.get(resturl, function(data) {
  });
  }
  });

$( "#amount" ).val( $( "#slider-vertical" ).slider( "value" ) );

});
   </script>

-1

最后下面对我有用

$(“#priceSlider”)。slider('option',{min:5,max:20,value:[6,19]});; $(“#priceSlider”)。slider(“ refresh”);


-3

这是工作版本:

var newVal = 10;
var slider = $('#slider');        
var s = $(slider);
$(slider).val(newVal);
$(slider).slider('refresh');

1
使用相同的代码可以得到很多答案,您只需从复制粘贴中弄乱它即可。
Rafael Herscovici 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.