2013-03-19 21 views
10

Próbuję wywołać zdarzenie, gdy użytkownik przesunie suwak, a wartość zostanie zmieniona po zatrzymaniu przesuwania. Zgodnie z dokumentacją jQuery, zdarzenie change byłoby idealne dla tego przypadku. Więc ja to wypróbowanie:Zdarzenie suwaka "zmiana" jQuery UI uruchamia się, nawet jeśli wartość się nie zmieniła

<!doctype html> 
    <html lang="en"> 
     <head> 
      <meta charset="utf-8" /> 
      <title>jQuery UI Slider - Default functionality</title> 
      <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" /> 
      <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
      <script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script> 
      <link rel="stylesheet" href="/resources/demos/style.css" /> 
      <script> 
       $(function() { 
        $("#slider").slider({ 
         change:function() { alert("foo"); } 
        }); 
       }); 
      </script> 
     </head> 
     <body> 
      <div id="slider"></div> 
     </body> 
    </html> 

Ja jednak zauważyć, że kiedy przeciągnij suwak w prawo i ponownie przeciągnąć go z powrotem do punktu wyjścia (początkową pozycję suwaka na stronie obciążenia), przy czym alarm wciąż strzela. Czy to jest błąd jQuery? Jeśli nie, jak to naprawić?

+1

Działaj zgodnie z przeznaczeniem. Zmieniaj zdarzenia, gdy suwak zmieni wartość, więc po przesunięciu go po raz pierwszy wartość suwaka zmieniła się na nową wartość, więc po jej przesunięciu wartość zmieniła się ponownie. – Populus

+0

Nie, mam na myśli to: przeciągnij w prawo, bez zwalniania go przywróć do pozycji wyjściowej (0). Teraz wydarzenie się kończy i masz wartość, w której byłeś, gdy zainicjowano przeciągnięcie. Więc dlaczego to jest wydarzenie "zmiany"? – SexyBeast

+0

Zmiana() prawdopodobnie wyzwala wyłączenie pozycji panelu suwaka, a nie identyfikatora suwaka. – isherwood

Odpowiedz

16
$(function() { 
    $("#slider").slider(); 

    var startPos = $("#slider").slider("value");, 
     endPos = ''; 

    $("#slider").on("slidestop", function(event, ui) { 
     endPos = ui.value; 

     if (startPos != endPos) { 
      // do stuff 
     } 

     startPos = endPos; 
    }); 
}); 
-1

Po prostu spróbuj.

$(function() { 
    $("#slider").slider({ 
     slide: function(event, ui) { 
      // use ui.value to get a number 
      // do your functions 
     } 
    }); 
}); 
+0

W jaki sposób wykrywa zmianę wartości? – isherwood

+1

Tak, jak w rzeczywistości? Nie chcę wywoływać funkcji podczas przesuwania, chcę to: uruchamiać zdarzenie, gdy użytkownik przestał się ślizgać, a bieżąca wartość jest inna niż ta, kiedy zaczął. – SexyBeast

Powiązane problemy