2011-06-16 46 views
1

我正在使用jquery數據表和一個jqueryui範圍滑塊。數據表和jQuery範圍滑塊來過濾數據

Datatables內置範圍過濾器,但使用輸入框輸入範圍。我想用滑塊代替。請有人幫助我修改下面的代碼,以使用滑塊。

當前的代碼是:

<script type="text/javascript" charset="utf-8"> 
/* Custom filtering function which will filter data in column four between two values */ 
$.fn.dataTableExt.afnFiltering.push(
function(oSettings, aData, iDataIndex) { 
var iMin = document.getElementById('min').value * 1; 
var iMax = document.getElementById('max').value * 1; 
var iVersion = aData[3] == "-" ? 0 : aData[3]*1; 
if (iMin == "" && iMax == "") 
{ 
return true; 
} 
else if (iMin == "" && iVersion <= iMax) 
{ 
return true; 
} 
else if (iMin <= iVersion && "" == iMax) 
{ 
return true; 
} 
else if (iMin <= iVersion && iVersion <= iMax) 
{ 
return true; 
} 
return false; 
} 
); 

$(document).ready(function() { 
    /* Initialise datatables */ 
    var oTable = $('#example').dataTable(); 

    /* Add event listeners to the two range filtering inputs */ 
     $('#min').keyup(function() { oTable.fnDraw(); }); 
     $('#max').keyup(function() { oTable.fnDraw(); }); 

}); 
     </script> 

     <script type="text/javascript"> 
$(function() { 
    $slider = $("#slider");//Caching slider object 
    $amount = $("#amount");//Caching amount object 
    $slider.slider({ 
     range: true, // necessary for creating a range slider 
     min: 0, // minimum range of slider 
     max: 50, //maximimum range of slider 
     values: [0, 50], //initial range of slider 
     step: 0.2, 
     slide: function(event, ui) { // This event is triggered on every mouse move during slide. 
      $amount.html('$' + ui.values[0] + ' - $' + ui.values[1]);//set value of amount span to current slider values 
     }, 
     stop: function(event, ui){//This event is triggered when the user stops sliding. 

     //alert($slider.slider("values", 0)); 


     } 
    }); 
    $amount.html('$' + $slider.slider("values", 0) + ' - $' + $slider.slider("values", 1)); 
}); 
</script> 

我無法在這裏顯示的代碼易於閱讀,所以我增加了它的jsfiddle還有:

http://jsfiddle.net/ny32j/

感謝

+0

什麼是用於過濾的兩個值?滑塊的實際值和滑塊的初始值?是否使用客戶端過濾? – 2011-06-16 14:56:40

+0

嗨, 是的,我使用客戶端過濾,示例代碼使用: $('#min')。keyup(function(){oTable.fnDraw();}); ('#max')。keyup(function(){oTable.fnDraw();}); 這是頁面上的兩個輸入框,但我想使用值$ slider.slider(「values」,0)和$ slider.slider(「values」,1) 謝謝 – Dino 2011-06-16 15:05:11

回答

2

第一件事你的範圍過濾器必須具有滑塊的值作爲iMin e iMax,所以我認爲你應該這樣做(確保你在正確的列上過濾數據UMN:在這個例子中ADATA [3]濾波器上的4個列):

$.fn.dataTableExt.afnFiltering.push(
function(oSettings, aData, iDataIndex) { 
//min value 
var iMin = $slider.slider("values", 0) 
//max value 
var iMax = $slider.slider("values", 1) 
var iVersion = aData[3] == "-" ? 0 : aData[3]*1; 
if (iMin == "" && iMax == "") 
{ 
return true; 
} 
else if (iMin == "" && iVersion <= iMax) 
{ 
return true; 
} 
else if (iMin <= iVersion && "" == iMax) 
{ 
return true; 
} 
else if (iMin <= iVersion && iVersion <= iMax) 
{ 
return true; 
} 
return false; 
} 
); 

他們當滑塊停止必須重繪tablke:

stop: function(event, ui){//This event is triggered when the user stops sliding. 
      oTable.fnDraw(); 
    } 

我沒有測試它當然,讓我知道你得到了什麼

+0

謝謝你的工作!我必須切換代碼塊,以便滑塊已被聲明並更改oTable.fnDraw();到$('#example')。dataTable()。fnDraw(); 非常感謝您的幫助,再次感謝! – Dino 2011-06-16 15:32:45

+0

如果問題解決了,請接受答案 – 2011-06-16 15:51:52