Как отменить событие сортировки в плагине 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');
Другие вопросы по тегам