Как отменить событие сортировки в плагине TableSorter?
Интересно, будет ли это возможно:
Во время события я хотел бы проверить определенное условие, если это условие истинно, я бы хотел отменить событие сразу.
В приведенном ниже случае, если это условие выполнено, я бы вообще хотел запретить пользователю сортировать таблицу.
$(table).bind("sortBegin",function(e, table) {
if(condition_is_met){
// ?? How to cancel the sortBegin?
}
});
Возможно ли что-то подобное в jquery?
Обновление:
Извинения,
1) я думал пометить tablesorter
было бы достаточно ясно, чтобы указать, какой плагин я использую.;) Тем не мение tablesorter
это. Спасибо
2) Я бы хотел запретить сортировку, пока условие не будет выполнено. Я не против, если вся таблица будет остановлена от сортировки или только текущее событие.
2 ответа
К сожалению, плагин не думал о preventDefault
- вам нужно либо изменить его, либо выдать исключение, чтобы прервать стек вызовов, который должен быть практически таким же, как хорошо поддерживаемый preventDefault
но страшнее
$(table).bind("sortBegin",function(e, table) {
if(condition_is_met){
throw new Error("");
}
});
IIRC, .trigger()
в jQuery работает синхронно, если это правда, то это будет работать.
Если вы хотите изменить плагин, вот как вы можете добавить поддержку preventDefault
:
var e = $.Event( "sortBegin" );
$this.trigger(e, $t0);
if( !e.isDefaultPrevented() ) {
setTimeout(function(){
// set css for headers
setHeadersCss($t0);
multisort($t0);
appendToTable($t0);
}, 1);
}
Теперь, когда клиент кода вызывает e.preventDefault()
в событии sortBegin плагин не будет продолжать сортировку.
jQuery предоставляет функцию unbind для отмены привязки события от селектора
Вот пример
$('#foo').unbind('click');