84 votes

jQuery UI Slider (réglage programmatique)

J'aimerais pouvoir modifier les curseurs à la volée. J'ai essayé de le faire en utilisant

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

Cet appel définira les valeurs, mais l'élément ne mettra pas à jour les positions du curseur. Appeler

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

n'aide pas non plus.

Existe-t-il une autre/meilleure façon de modifier la valeur ET la position du curseur ?

154voto

alexteg Points 1314

Cela dépend si vous souhaitez modifier les curseurs dans la plage actuelle ou modifier la plage des curseurs.

Si ce sont les valeurs de la plage actuelle que vous voulez modifier, alors la méthode .slider() est celle que vous devez utiliser, mais la syntaxe est un peu différente de celle que vous avez utilisée :

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

ou si vous avez un curseur avec deux poignées, ce serait :

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

Si c'est la gamme que vous voulez modifier, ce sera le cas :

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

7 votes

Qui fonctionne jusqu'à présent, mais qui n'exécute pas le gestionnaire d'événement. Le gestionnaire d'événement met à jour certains span's en glissant. Il semble que je ne puisse pas déclencher l'événement de glissement manuellement ?

1 votes

J'ai essayé à la fois .slider('value', 100) et .slider('option', 'value', 100) et le curseur ne bouge pas. Est-ce que je me trompe en pensant qu'il DEVRAIT bouger ? ou est-ce que cela change juste la VALEUR, et je dois rafraîchir ou quelque chose comme ça pour vraiment VOIR le curseur bouger ? je ne voulais pas poser une question répétitive alors qu'il semble que cette réponse soit si proche de ce dont j'ai réellement besoin.

2 votes

Si vous disposez d'un curseur à plage, vous devez utiliser l'index entier (début 0) de la poignée que vous souhaitez déplacer. Ainsi, pour déplacer la première poignée (index 0) à 50, utilisez $("#slider").slider('values',0,50) ; si vous voulez déplacer la deuxième poignée (index 1) à 50, utilisez $("#slider").slider('values',1,50) ;

16voto

sakhunzai Points 2399

Pour moi, cela déclenche parfaitement l'événement slide sur UI Slider :

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

N'oubliez pas de définir la valeur par hs.slider('option', 'value',h); avant le déclenchement. Dans le cas contraire, le gestionnaire du curseur ne sera pas synchronisé avec la valeur.

Il convient de noter que h est l'index/position (et non la valeur) dans le cas où vous utilisez le html select .

0 votes

Cette solution a parfaitement fonctionné pour moi en utilisant jQuery UI 1.8.24.

1 votes

Pour moi aussi... seule cette solution a fonctionné... jQuery 1.8.3 et jQuery UI 1.9.2 Je veux dire que d'après la réponse de @alexteg, les valeurs étaient définies correctement mais le curseur ne coulissait pas.

0 votes

Un script modifié pour le curseur de plage serait le suivant : $('#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]}); }); Où #minPrice et #maxPrice sont deux zones de texte.

9voto

Mal Points 67

Aucune des réponses ci-dessus n'a fonctionné pour moi, peut-être étaient-elles basées sur une ancienne version du cadre ?

Tout ce que j'avais à faire était de définir la valeur du contrôle sous-jacent, puis d'appeler la méthode de rafraîchissement, comme indiqué ci-dessous :

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

2 votes

Cela vous convient-il ? Je ne trouve rien à ce sujet dans la documentation et je n'arrive pas à le faire fonctionner.

10 votes

Signaler un Error: no such method 'refresh' for slider widget instance erreur dans chrome

1 votes

Fonctionne pour mon installation avec JQ 2.1.0 + JQM 1.4.2.

5voto

bentwonk Points 103

La réponse de Mal est la seule qui ait fonctionné pour moi (peut-être que jqueryUI a changé), voici une variante pour traiter une plage :

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

2voto

anonymous Points 19

Il est possible de déclencher manuellement des événements de ce type :

Appliquer le comportement du curseur à l'élément

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

...

Régler la valeur du curseur

s.slider('value',10);

Déclencher l'événement de glissement, en passant un objet d'interface utilisateur.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X