88 lines
2.9 KiB
JavaScript
88 lines
2.9 KiB
JavaScript
|
/*! input & select parsers for jQuery 1.7+ & tablesorter 2.7.11+
|
||
|
* Updated 2/19/2014 (v2.15.0)
|
||
|
* Demo: http://mottie.github.com/tablesorter/docs/example-widget-grouping.html
|
||
|
*/
|
||
|
/*jshint browser: true, jquery:true, unused:false */
|
||
|
;(function($){
|
||
|
"use strict";
|
||
|
|
||
|
var resort = true, // resort table after update
|
||
|
updateServer = function(event, $table, $input){
|
||
|
// do something here to update your server, if needed
|
||
|
// event = change event object
|
||
|
// $table = jQuery object of the table that was just updated
|
||
|
// $input = jQuery object of the input or select that was modified
|
||
|
};
|
||
|
|
||
|
// Custom parser for parsing input values
|
||
|
// updated dynamically using the "change" function below
|
||
|
$.tablesorter.addParser({
|
||
|
id: "inputs",
|
||
|
is: function(){
|
||
|
return false;
|
||
|
},
|
||
|
format: function(s, table, cell) {
|
||
|
return $(cell).find('input').val() || s;
|
||
|
},
|
||
|
parsed : true, // filter widget flag
|
||
|
type: "text"
|
||
|
});
|
||
|
|
||
|
// Custom parser for including checkbox status if using the grouping widget
|
||
|
// updated dynamically using the "change" function below
|
||
|
$.tablesorter.addParser({
|
||
|
id: "checkbox",
|
||
|
is: function(){
|
||
|
return false;
|
||
|
},
|
||
|
format: function(s, table, cell, cellIndex) {
|
||
|
var $c = $(cell),
|
||
|
$input = $c.find('input[type="checkbox"]'),
|
||
|
isChecked = $input.length ? $input[0].checked : '';
|
||
|
// adding class to row, indicating that a checkbox is checked; includes
|
||
|
// a column index in case more than one checkbox happens to be in a row
|
||
|
$c.closest('tr').toggleClass('checked-' + cellIndex, isChecked);
|
||
|
// returning plain language here because this is what is shown in the
|
||
|
// group headers - change it as desired
|
||
|
return $input.length ? isChecked ? 'checked' : 'unchecked' : s;
|
||
|
},
|
||
|
parsed : true, // filter widget flag
|
||
|
type: "text"
|
||
|
});
|
||
|
|
||
|
// Custom parser which returns the currently selected options
|
||
|
// updated dynamically using the "change" function below
|
||
|
$.tablesorter.addParser({
|
||
|
id: "select",
|
||
|
is: function(){
|
||
|
return false;
|
||
|
},
|
||
|
format: function(s, table, cell) {
|
||
|
return $(cell).find('select').val() || s;
|
||
|
},
|
||
|
parsed : true, // filter widget flag
|
||
|
type: "text"
|
||
|
});
|
||
|
|
||
|
// update select and all input types in the tablesorter cache when the change event fires.
|
||
|
// This method only works with jQuery 1.7+
|
||
|
// you can change it to use delegate (v1.4.3+) or live (v1.3+) as desired
|
||
|
// if this code interferes somehow, target the specific table $('#mytable'), instead of $('table')
|
||
|
$(window).load(function(){
|
||
|
// this flag prevents the updateCell event from being spammed
|
||
|
// it happens when you modify input text and hit enter
|
||
|
var alreadyUpdating = false;
|
||
|
$('table').find('tbody').on('change', 'select, input', function(e){
|
||
|
if (!alreadyUpdating) {
|
||
|
var $tar = $(e.target),
|
||
|
$table = $tar.closest('table');
|
||
|
alreadyUpdating = true;
|
||
|
$table.trigger('updateCell', [ $tar.closest('td'), resort ]);
|
||
|
updateServer(e, $table, $tar);
|
||
|
setTimeout(function(){ alreadyUpdating = false; }, 10);
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
|
||
|
})(jQuery);
|