2012-09-02 5 views
6

In questa pagina demo: http://jqueryui.com/demos/slider/#event-changeInterfaccia utente di Jquery: intervallo di scorrimento. Quale cursore viene spostato?

Il 'slide' riscrittura evento ha due ingressi in una volta:

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

Per i miei scopi che voglio sapere, quale delle due cursori vengono spostati (min o max) . Come posso ottenerlo?

+0

_min o max_? Puoi elaborare? – undefined

+0

Stai chiedendo a proposito di due cursori, ognuno con una singola maniglia o un singolo cursore con due maniglie (un cursore "intervallo")? –

+1

Matt Ball, chiedo del singolo cursore con due maniglie. – Nikoole

risposta

5

@Nikoole, non v'è alcun metodo specifico per trovare quale maniglia è scorrevole, ma si potrebbe provare questo trucco

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

Spero che questo vi aiuterà.

+0

Non dimenticare la radice quando si usa parseInt. – j08691

+0

Grazie @ j08691, aggiornerò la mia risposta di conseguenza. –

+0

Kundan Singh Chouhan, molte grazie! Intendi: 'else if (** maxSlide **! = ParseInt (ui.values ​​[1], 10)) { // Fai cosa nel caso di handle massimo }' – Nikoole

8

Anche io ho affrontato lo stesso problema di recente. Quando si utilizza un cursore di intervallo, è necessario determinare quale cursore (destro o sinistro) è stato spostato. C'è no direct modo per determinare che, ma tuttavia, l'oggetto ui ha attributi, value e values che è possibile utilizzare per determinare quale dispositivo di scorrimento è stato spostato. ecco la soluzione che ha funzionato per me: -

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

Ho risolto questo impostando attributo ID a min e max selettori sul creare evento definito dal cursore 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'); 
     }); 
     } 

... e poi di nuovo nel mio caso ho slide attributo ID Simply Red dal ui.handler per ottenere che uno si muove :)

+0

Mi piace la tua soluzione, ma l'uso dell'ID si scontrerà se c'è più di un cursore sulla pagina. Suggerirei di aggiungere una classe. Ciò può anche consentire a un singolo cursore di avere una classe di max e min, e quindi evitare di dover codificare in modo diverso per single e range. – pperrin

11

gestore cursore destro è l'ultimo figlio di contenitore di scorrimento, così, a differenza gestore di sinistra, il gestore destro non ha 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

bellissima soluzione! ha funzionato perfettamente per una condizione 'return false' .. grazie! – kingkode

+0

è la soluzione più veloce! – Nikit

3

L'evento di diapositiva richiede due parametri: evento e ui. ui contiene un oggetto maniglia. È possibile accedere e testare l'indice del manico in questo modo:

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

Questo funziona per qualsiasi numero di handle in un dato dispositivo di scorrimento. Notare che gli indici iniziano da 1 e non da 0.

+0

finalmente un'ottima risposta !!! Lo stavo cercando per sempre. dove hai trovato la funzione indice ?? – Kulpemovitz

Problemi correlati