JQuery UI: ползунок диапазона. Какой слайдер перемещается?
на этой демо-странице: http://jqueryui.com/demos/slider/#event-change
перезапись события "слайд" имеет два входа одновременно:
$( "#amount" ).val( "$" + $( "#slider-range" ).slider( "values", 0 ) +
" - $" + $( "#slider-range" ).slider( "values", 1 ) );
для моих целей я хочу знать, какой из двух ползунков перемещается (min или max). Как мне его достать?
5 ответов
@Nikoole, нет конкретного метода, чтобы найти, какая ручка скользит, но вы можете попробовать этот трюк
var minSlide = 75, maxSlide = 300;
$("#slider-range").slider({
range: true,
min: 0,
max: 500,
values: [ 75, 300 ],
slide: function( event, ui ) {
if(minSlide != parseInt(ui.values[0], 10)){
// Do what in minimum handle case
}
else if(maxSlide != parseInt(ui.values[1], 10)) {
// Do what in maximum handle case
}
},
stop: function(event, ui){
minSlide = parseInt(ui.values[0], 10);
maxSlide = parseInt(ui.values[1], 10);
}
});
надеюсь, это поможет.
правый обработчик слайдера является последним дочерним элементом контейнера слайдера, поэтому, в отличие от левого обработчика, правый обработчик не имеет nextSibling:
$('#slider-range').slider({
range: true,
min: 0, max: 500,
values: [ 75, 300 ],
slide: function(event, ui) {
if (ui.handle.nextSibling) {
// Moving LEFT slider ...
} else {
// Moving RIGHT slider ...
}
}
});
даже я столкнулся с той же проблемой. При использовании ползунка диапазона необходимо определить, какой ползунок (правый или левый) был перемещен. Есть прямой способ определить это, но тем не менее,
событие слайда принимает два параметра: event и ui. пользовательский интерфейс содержит объект обработки. Вы можете получить доступ и проверить индекс дескриптора следующим образом:
$("#slider-range").slider({
range: true,
min: 0,
max: 500,
values: [ 75, 300 ],
slide: function( event, ui ) {
var index = $(ui.handle).index();
if (index == 1) {
// do stuff for minimum
}
if (index == 2) {
// do stuff for maximum
}
}
});
это работает для любого количества дескрипторов в данном слайдере. Но учтите, что индексы начинаются с 1 а не 0.
я решил это, установив атрибут ID в min и max селекторы при создании события, определенного slider API http://api.jqueryui.com/1.8/slider/#event-create.
create:function(event, ui)
{
var handlers = $('.ui-slider-handle');
$.each(handlers, function(i, element)
{
if(i == 0)
$(element).attr('id', 'slider-handler-min');
else
$(element).attr('id', 'slider-handler-max');
});
}
...а потом обратно в мой slide
событие я просто красный атрибут ID из ui.handler
чтобы получить, какой из них движется:)