2

我想知道这是否可能:

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

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

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

});

在 jquery 中可能有这样的事情吗?

更新

道歉,

1)我认为标记tablesorter会足够清晰,以指示我正在使用哪个插件。;) 无论如何tablesorter它是。谢谢

2)我想禁止任何类型的排序,直到不再满足条件。我不介意整个表格是否会停止排序或仅停止当前事件。

4

2 回答 2

1

不幸的是,插件没有考虑到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 事件时,插件将不会继续进行排序。

于 2013-01-19T12:07:36.987 回答
-2

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

这是一个例子

$('#foo').unbind('click');
于 2013-01-19T11:54:52.043 回答