数据表。如何阻止从事件处理程序内部触发 search.dt 事件

DataTable. How to stop a search.dt event from being fired from inside the event handler

我有这段代码,当我检测到用户输入的过滤器包含一些错误字符时,例如 ' 我不希望它到达服务器。

我有这个简化的代码:

$table.on('search.dt', function () {
    var value = getValue();
    if (antiHackingHelper.isValid(value)) {
    } else { // Contains charakter like "'" so don't call the server with this bad filter
        // Don't send the request to the server with a filter with bad characters
    }
});

此时您无法阻止执行搜索。 search.dt 在您的 $table.on('search.dt' listener... 执行时已经广播,并且它不是您可以取消搜索 "upstream" 的链的一部分。

相反,您可以首先防止在过滤器框中输入非法字符:

var illegalChars = "',.-*)(";
$('.dataTables_filter input').on('keypress', function(e) {
   if (~illegalChars.indexOf(String.fromCharCode(e.keyCode))) {
     console.log('Illegal char entered, aborting');
     return false;
   }
})

演示 -> http://jsfiddle.net/q39c3c0k/