Reputation: 1457
I'm using jquery datatables, and a jqueryui range slider.
Datatables has a range filter built in, but using input boxes to enter your ranges. I want use a slider instead. Please can someone help me to modify the code below, to use the slider.
the current code is:
<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>
I wasn't able to display the code easily readable here so I have added it to jsfiddle as well:
Thanks
Upvotes: 2
Views: 4816
Reputation: 76890
first thing your range filter must have the value of the slider as iMin e iMax so i think you should do (make sure you filter data on the correct column: in this example aData[3] filters on the 4 column):
$.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;
}
);
them you must redraw the tablke when the slider stops:
stop: function(event, ui){//This event is triggered when the user stops sliding.
oTable.fnDraw();
}
i didn't test it of course, let me know what you get
Upvotes: 3