diff --git a/js/widgets/widget-filter-formatter-jui.js b/js/widgets/widget-filter-formatter-jui.js
index 78fbbe0b..9b933f04 100644
--- a/js/widgets/widget-filter-formatter-jui.js
+++ b/js/widgets/widget-filter-formatter-jui.js
@@ -89,18 +89,20 @@
chkd = $cell.find('.toggle').is(':checked');
}
state = o.disabled || !chkd ? 'disable' : 'enable';
- $cell.find('.filter')
- // add equal to the beginning, so we filter exact numbers
- .val( chkd ? (compare ? compare : o.exactMatch ? '=' : '') + v : '' )
- .trigger( notrigger ? '' : 'search', searchType ).end()
- .find('.spinner').spinner(state).val(v);
- // update sticky header cell
- if ($shcell.length) {
- $shcell
- .find('.spinner').spinner(state).val(v).end()
- .find(compareSelect).val( compare );
- if (o.addToggle) {
- $shcell.find('.toggle')[0].checked = chkd;
+ if (!ts.isEmptyObject($cell.find('.spinner').data())) {
+ $cell.find('.filter')
+ // add equal to the beginning, so we filter exact numbers
+ .val( chkd ? (compare ? compare : o.exactMatch ? '=' : '') + v : '' )
+ .trigger( notrigger ? '' : 'search', searchType ).end()
+ .find('.spinner').spinner(state).val(v);
+ // update sticky header cell
+ if ($shcell.length) {
+ $shcell
+ .find('.spinner').spinner(state).val(v).end()
+ .find(compareSelect).val( compare );
+ if (o.addToggle) {
+ $shcell.find('.toggle')[0].checked = chkd;
+ }
}
}
};
@@ -137,7 +139,7 @@
});
// update spinner from hidden input, in case of saved filters
- c.$table.bind('filterFomatterUpdate', function(){
+ c.$table.bind('filterFomatterUpdate' + c.namespace + 'filter', function(){
var val = tsff.updateCompare($cell, $input, o)[0];
$cell.find('.spinner').val( val );
updateSpinner({ value: val }, true);
@@ -153,7 +155,7 @@
}
// has sticky headers?
- c.$table.bind('stickyHeadersInit', function(){
+ c.$table.bind('stickyHeadersInit' + c.namespace + 'filter', function(){
$shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
if (o.addToggle) {
$('
' +
@@ -187,7 +189,7 @@
});
// on reset
- c.$table.bind('filterReset', function(){
+ c.$table.bind('filterReset' + c.namespace + 'filter', function(){
if ($.isArray(o.compare)) {
$cell.add($shcell).find(compareSelect).val( o.compare[ o.selected || 0 ] );
}
@@ -250,24 +252,26 @@
// add values to the handle data-value attribute so the css tooltip will work properly
$cell.find('.ui-slider-handle').addClass('value-popup').attr('data-value', result);
}
- // update the hidden input;
- // ****** ADD AN EQUAL SIGN TO THE BEGINNING! <- this makes the slide exactly match the number ******
- // when the value is at the minimum, clear the hidden input so all rows will be seen
-
- $cell.find('.filter')
- .val( ( compare ? compare + v : v === o.min ? '' : (o.exactMatch ? '=' : '') + v ) )
- .trigger( notrigger ? '' : 'search', searchType ).end()
- .find('.slider').slider('value', v);
-
- // update sticky header cell
- if ($shcell.length) {
- $shcell
- .find(compareSelect).val( compare ).end()
+ // prevent JS error if "resetToLoadState" or filter widget was removed for another reason
+ if (!ts.isEmptyObject($cell.find('.slider').data())) {
+ // update the hidden input;
+ $cell.find('.filter')
+ // ****** ADD AN EQUAL SIGN TO THE BEGINNING! <- this makes the slide exactly match the number ******
+ // when the value is at the minimum, clear the hidden input so all rows will be seen
+ .val( ( compare ? compare + v : v === o.min ? '' : (o.exactMatch ? '=' : '') + v ) )
+ .trigger( notrigger ? '' : 'search', searchType ).end()
.find('.slider').slider('value', v);
- if (o.valueToHeader) {
- $shcell.closest('thead').find('th[data-column=' + indx + ']').find('.curvalue').html(' (' + result + ')');
- } else {
- $shcell.find('.ui-slider-handle').addClass('value-popup').attr('data-value', result);
+
+ // update sticky header cell
+ if ($shcell.length) {
+ $shcell
+ .find(compareSelect).val( compare ).end()
+ .find('.slider').slider('value', v);
+ if (o.valueToHeader) {
+ $shcell.closest('thead').find('th[data-column=' + indx + ']').find('.curvalue').html(' (' + result + ')');
+ } else {
+ $shcell.find('.ui-slider-handle').addClass('value-popup').attr('data-value', result);
+ }
}
}
@@ -296,7 +300,7 @@
.slider(o);
// update slider from hidden input, in case of saved filters
- c.$table.bind('filterFomatterUpdate', function(){
+ c.$table.bind('filterFomatterUpdate' + c.namespace + 'filter', function(){
var val = tsff.updateCompare($cell, $input, o)[0];
$cell.find('.slider').slider('value', val );
updateSlider({ value: val }, false);
@@ -312,7 +316,7 @@
}
// on reset
- c.$table.bind('filterReset', function(){
+ c.$table.bind('filterReset' + c.namespace + 'filter', function(){
if ($.isArray(o.compare)) {
$cell.add($shcell).find(compareSelect).val( o.compare[ o.selected || 0 ] );
}
@@ -322,7 +326,7 @@
});
// has sticky headers?
- c.$table.bind('stickyHeadersInit', function(){
+ c.$table.bind('stickyHeadersInit' + c.namespace + 'filter', function(){
$shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
// add a jQuery UI slider!
@@ -401,20 +405,22 @@
.eq(0).attr('data-value', val[0]).end() // adding value to data attribute
.eq(1).attr('data-value', val[1]); // value popup shown via css
}
- // update the hidden input
- $cell.find('.filter').val(range)
- .trigger(notrigger ? '' : 'search', searchType).end()
- .find('.range').slider('values', val);
- // update sticky header cell
- if ($shcell.length) {
- $shcell.find('.range').slider('values', val);
- if (o.valueToHeader) {
- $shcell.closest('thead').find('th[data-column=' + indx + ']').find('.currange').html(' (' + result + ')');
- } else {
- $shcell.find('.ui-slider-handle')
- .addClass('value-popup')
- .eq(0).attr('data-value', val[0]).end() // adding value to data attribute
- .eq(1).attr('data-value', val[1]); // value popup shown via css
+ if (!ts.isEmptyObject($cell.find('.range').data())) {
+ // update the hidden input
+ $cell.find('.filter').val(range)
+ .trigger(notrigger ? '' : 'search', searchType).end()
+ .find('.range').slider('values', val);
+ // update sticky header cell
+ if ($shcell.length) {
+ $shcell.find('.range').slider('values', val);
+ if (o.valueToHeader) {
+ $shcell.closest('thead').find('th[data-column=' + indx + ']').find('.currange').html(' (' + result + ')');
+ } else {
+ $shcell.find('.ui-slider-handle')
+ .addClass('value-popup')
+ .eq(0).attr('data-value', val[0]).end() // adding value to data attribute
+ .eq(1).attr('data-value', val[1]); // value popup shown via css
+ }
}
}
@@ -443,13 +449,13 @@
.slider(o);
// update slider from hidden input, in case of saved filters
- c.$table.bind('filterFomatterUpdate', function(){
+ c.$table.bind('filterFomatterUpdate' + c.namespace + 'filter', function(){
getRange();
ts.filter.formatterUpdated($cell, indx);
});
// on reset
- c.$table.bind('filterReset', function(){
+ c.$table.bind('filterReset' + c.namespace + 'filter', function(){
$cell.find('.range').slider('values', o.values);
setTimeout(function(){
updateUiRange();
@@ -457,7 +463,7 @@
});
// has sticky headers?
- c.$table.bind('stickyHeadersInit', function(){
+ c.$table.bind('stickyHeadersInit' + c.namespace + 'filter', function(){
$shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
// add a jQuery UI slider!
@@ -552,7 +558,7 @@
$date.datepicker(o);
// on reset
- c.$table.bind('filterReset', function(){
+ c.$table.bind('filterReset' + c.namespace + 'filter', function(){
if ($.isArray(o.compare)) {
$cell.add($shcell).find(compareSelect).val( o.compare[ o.selected || 0 ] );
}
@@ -563,7 +569,7 @@
});
// update date compare from hidden input, in case of saved filters
- c.$table.bind('filterFomatterUpdate', function(){
+ c.$table.bind('filterFomatterUpdate' + c.namespace + 'filter', function(){
var num, v = $input.val();
if (/\s+-\s+/.test(v)) {
// date range found; assume an exact match on one day
@@ -591,7 +597,7 @@
}
// has sticky headers?
- c.$table.bind('stickyHeadersInit', function(){
+ c.$table.bind('stickyHeadersInit' + c.namespace + 'filter', function(){
$shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
// add a jQuery datepicker!
@@ -702,7 +708,7 @@
$cell.find('.dateTo').datepicker(o);
// update date compare from hidden input, in case of saved filters
- c.$table.bind('filterFomatterUpdate', function(){
+ c.$table.bind('filterFomatterUpdate' + c.namespace + 'filter', function(){
var val = $input.val() || '',
from = '',
to = '';
@@ -733,7 +739,7 @@
});
// has sticky headers?
- c.$table.bind('stickyHeadersInit', function(){
+ c.$table.bind('stickyHeadersInit' + c.namespace + 'filter', function(){
$shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
$shcell.append(t);
@@ -747,7 +753,7 @@
});
// on reset
- $cell.closest('table').bind('filterReset', function(){
+ $cell.closest('table').bind('filterReset' + c.namespace + 'filter', function(){
$cell.add($shcell).find('.dateFrom').val('').datepicker('setDate', o.from || null );
$cell.add($shcell).find('.dateTo').val('').datepicker('setDate', o.to || null );
setTimeout(function(){
diff --git a/js/widgets/widget-filter-formatter-select2.js b/js/widgets/widget-filter-formatter-select2.js
index cb517916..e1eeee0d 100644
--- a/js/widgets/widget-filter-formatter-select2.js
+++ b/js/widgets/widget-filter-formatter-select2.js
@@ -70,18 +70,20 @@
if (arry) {
v = v.split('\u0000');
}
- $input
- // add regex, so we filter exact numbers
- .val(
- $.isArray(v) && v.length && v.join('') !== '' ?
- '/(' + matchPrefix + (v || []).join(matchSuffix + '|' + matchPrefix) + matchSuffix + ')/' + flags :
- ''
- )
- .trigger('search').end()
- .find('.select2').select2('val', v);
- // update sticky header cell
- if (c.widgetOptions.$sticky) {
- c.widgetOptions.$sticky.find('.select2col' + indx + ' .select2').select2('val', v);
+ if (!ts.isEmptyObject($input.find('.select2').data())) {
+ $input
+ // add regex, so we filter exact numbers
+ .val(
+ $.isArray(v) && v.length && v.join('') !== '' ?
+ '/(' + matchPrefix + (v || []).join(matchSuffix + '|' + matchPrefix) + matchSuffix + ')/' + flags :
+ ''
+ )
+ .trigger('search').end()
+ .find('.select2').select2('val', v);
+ // update sticky header cell
+ if (c.widgetOptions.$sticky) {
+ c.widgetOptions.$sticky.find('.select2col' + indx + ' .select2').select2('val', v);
+ }
}
},
diff --git a/js/widgets/widget-filter.js b/js/widgets/widget-filter.js
index 816ce2b6..7438a64b 100644
--- a/js/widgets/widget-filter.js
+++ b/js/widgets/widget-filter.js
@@ -69,7 +69,8 @@
var tbodyIndex, $tbody,
$table = c.$table,
$tbodies = c.$tbodies,
- events = 'addRows updateCell update updateRows updateComplete appendCache filterReset filterAndSortReset filterEnd search '
+ events = 'addRows updateCell update updateRows updateComplete appendCache filterReset ' +
+ 'filterAndSortReset filterFomatterUpdate filterEnd search stickyHeadersInit '
.split( ' ' ).join( c.namespace + 'filter ' );
$table
.removeClass( 'hasFilters' )
@@ -599,7 +600,9 @@
// so we have to work with it instead
formatterUpdated: function( $cell, column ) {
// prevent error if $cell is undefined - see #1056
- var wo = $cell && $cell.closest( 'table' )[0].config.widgetOptions;
+ var $table = $cell && $cell.closest( 'table' );
+ var config = $table.length && $table[0].config,
+ wo = config && config.widgetOptions;
if ( wo && !wo.filter_initialized ) {
// add updates by column since this function
// may be called numerous times before initialization