2012-09-02 18 views
6

Na tej stronie demo: http://jqueryui.com/demos/slider/#event-changeJquery UI: suwak zasięgu. Który suwak jest przesuwany?

Zdarzenie „slide” przepisać posiada dwa wejścia na raz:

$("#amount").val("$" + $("#slider-range").slider("values", 0) + 
      " - $" + $("#slider-range").slider("values", 1)); 

do moich celów Chcę wiedzieć, który z dwóch suwaków są przenoszone (min lub max) . Jak mogę to zdobyć?

+0

_min lub max_? Czy możesz rozwinąć? – undefined

+0

Pytasz o dwa suwaki, każdy z pojedynczym uchwytem lub pojedynczy suwak z dwoma uchwytami (suwak "zakres")? –

+1

Matt Ball, pytam o pojedynczy suwak z dwoma uchwytami. – Nikoole

Odpowiedz

5

@Nikoole, nie ma specyficzny sposób, aby dowiedzieć się, jakie jest uchwyt przesuwny, ale można spróbować tej sztuczki

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);    
    } 
}); 

nadzieję, że to pomoże.

+0

Nie zapomnij o podstawce, gdy używasz parseInt. – j08691

+0

Dzięki @ j08691, odpowiednio zaktualizuję swoją odpowiedź. –

+0

Kundan Singh Chouhan, wielkie dzięki! Czy masz na myśli: 'else if (** maxSlide **! = ParseInt (ui.values ​​[1], 10)) { // Wykonaj co w przypadku maksymalnej klamki }' – Nikoole

8

Nawet ja ostatnio zmierzyłem się z tym samym problemem. Używając suwaka zasięgu, musisz określić, który suwak (prawy lub lewy) został przeniesiony. Istnieje bez bezpośredniego, sposób ustalenia tego, ale jednak, obiekt ui ma atrybuty, value i values, które można wykorzystać do określenia, który suwak został przeniesiony. Oto rozwiązanie, które pracował dla mnie: -

 $("#slider-range").slider({ 
     range: true, 
     min: 75, 
     max: 300, 
     values:[75,300], 
     slide: function(event, ui) { 
     target_name = '' 
     if(ui.values[0] == ui.value) target_name = 'min_price' 
     else if(ui.values[1] == ui.value) target_name = 'max_price' 
     alert(target_name) 
     } 
1

Rozwiązałem to przez ustawienie atrybutu ID do MIN i MAX na selektorów utworzyć zdarzenie zdefiniowane przez suwak 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'); 
     }); 
     } 

... a potem z powrotem w moim przypadku po prostu slide czerwony atrybut ID z ui.handler dostać których jedna porusza :)

+0

Podoba mi się twoje rozwiązanie, ale używanie identyfikatora będzie kolidować, jeśli na stronie jest więcej niż jeden suwak. Sugerowałbym zamiast tego dodanie klasy. Dzięki temu pojedynczy suwak może mieć klasę max i min, dzięki czemu unika się konieczności kodowania inaczej dla pojedynczych i zakresów. – pperrin

11

Prawy obsługi suwak jest ostatnim dzieckiem pojemnika suwak, więc, w przeciwieństwie do left handler, prawy handler nie ma 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 ... 
     } 
    } 
}); 
+1

piękne rozwiązanie! działał idealnie na wypadek "zwrotu fałszywego" .. dzięki! – kingkode

+0

to najszybsze rozwiązanie! – Nikit

3

Zdarzenie slide ma dwa parametry: event i ui. ui zawiera obiekt uchwytu. można uzyskać dostęp i przetestować indeks uchwytu tak:

$("#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 
     } 
    } 
}); 

To działa dla dowolnej liczby uchwytów w danym suwaka. Należy jednak pamiętać, że indeksy zaczynają się od 1 nie 0.

+0

wreszcie świetna odpowiedź !!! Szukałem tego na zawsze. gdzie znalazłeś funkcję indeksu? – Kulpemovitz