2013-03-19 60 views
10

我試圖在用戶滑動滑塊時觸發事件,並且在滑動停止時更改值。根據jQuery文檔,change事件對於這種情況將是理想的。所以,我想這一點:即使值未改變,jQuery UI滑塊「更改」事件也會觸發

<!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> 

然而,我注意到,當我拖動滑塊到右邊,並再次將其拖回到起點(在頁面加載滑塊的初始位置)時,警報仍然會觸發。這是一個jQuery的錯誤?如果不是,我該如何解決這個問題?

+1

按預期工作。每當滑塊更改值時都會觸發更改事件,因此當您第一次將滑塊的值更改爲新值時移動該事件,因此當您將其移回時,該值會再次發生更改。 – Populus 2013-03-19 19:42:44

+0

不,我的意思是這樣的:將它拖到右邊,不釋放它回到初始位置(0)。所以,現在事件完成了,並且當您開始拖動時,您處於的價值。那麼這是一個「變化」事件? – SexyBeast 2013-03-19 19:43:57

+0

Change()可能會觸發滑塊面板位置,而不是滑塊ID。 – isherwood 2013-03-19 19:44:28

回答

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

試試吧。

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

這是如何檢測到價值的變化? – isherwood 2013-03-19 20:55:49

+1

是的,怎麼樣?我不想在滑動時觸發一個函數,我想這樣做:在用戶停止滑動時觸發事件,當前值與他啓動時的值不同。 – SexyBeast 2013-03-19 21:28:55

相關問題