如何在tablesorter插件中取消排序事件?

时间:2013-01-19 11:52:30

标签: jquery tablesorter

我想知道这是否可能:

在活动期间我想检查某些条件,如果条件成立,我想立即取消活动。

在下面的情况中,如果满足这个条件,我想不允许用户对表格进行排序。

$(table).bind("sortBegin",function(e, table) { 
   if(condition_is_met){
     // ?? How to cancel the sortBegin?
   }

});

在jquery中是否可以这样?

更新

道歉,

1)我认为标记tablesorter足够清楚,表明我正在使用哪个插件。 ;)无论如何tablesorter它是。感谢

2)我想禁止任何种类的分类,直到不再满足条件为止。我不介意整个表是停止排序还是只停止当前事件。

2 个答案:

答案 0 :(得分:1)

不幸的是插件没有考虑preventDefault - 您需要修改它或抛出异常来中止 调用堆栈,它应该与支持良好的preventDefault实际上相同,但更丑陋。

$(table).bind("sortBegin",function(e, table) { 
   if(condition_is_met){
     throw new Error("");
   }

});

IIRC,jQuery中的.trigger()同步工作,如果这是真的那么这将有效。

如果您想修改插件,可以添加对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);
}

现在,当代码的客户端在sortBegin事件中调用e.preventDefault()时,插件将不会继续进行排序。

答案 1 :(得分:-2)

jQuery提供unbind函数来取消绑定选择器中的事件

这是一个例子

$('#foo').unbind('click');