注意:此答案适用于dataTables 1.9.x!
对于$.fn.dataTableExt.sErrMode
唯一值有任何重要性是“警觉”。这是“警觉”或其他任何事情。 sErrMode
由内部调度功能_fnLog
在media/js/jquery.dataTables.js
处理,在v1.9.2的约4575行:
function _fnLog(oSettings, iLevel, sMesg)
{
var sAlert = (oSettings===null) ?
"DataTables warning: "+sMesg :
"DataTables warning (table id = '"+oSettings.sTableId+"'): "+sMesg;
if (iLevel === 0)
{
if (DataTable.ext.sErrMode == 'alert')
{
alert(sAlert);
}
else
{
throw new Error(sAlert);
}
return;
}
else if (window.console && console.log)
{
console.log(sAlert);
}
}
Unfortunelaty,没有办法覆盖数据表的内部功能,相信我 - 我都试过了,与原型不可能或其他任何东西。你可以阅读到here作者艾伦·怡和自己的意见:由于数据表是如何在 时刻构建
我很抱歉地说,这不是可以覆盖使用 Javascript之外,内部功能数据表范围。当我开始执行2.x系列(可能 暂时关闭!)时,这将会是 ,但是目前您需要更改内核。
有人可能会认为:嘿,也许是的ilevel标志可以在某处设置改变?再次,不幸的是没有。 iLevel
在对_fnLog
的每次内部调用中都进行了硬编码。
这是令人失望的,我们必须在丑陋的警报和完全停止执行之间进行选择,因为会引发错误。简单覆盖window.onerror
也不起作用。解决的办法是修改_fnLog
,只需注释掉其中抛出的自定义错误行:
else
{
// throw new Error(sAlert); <-- comment this line
}
如果你有$.fn.dataTableExt.sErrMode = 'throw'
(任何东西,但“警报”)的继续执行,如果发生错误。更妙的是,一个可能需要在其他情况下,这些引发的错误,外面设置一个标志,像
window.isDebugging = true;
和
else
{
if (!window.isDebugging) throw new Error(sAlert);
}
这不是一个“黑客”在我看来,不过一般的推翻不可避免的jQuery dataTables行为有时并不令人满意。正如Allan Jardine自己写的上面的链接:
为什么你不能只修改源代码?这是整点开放 源:-)
最好的解决方案将永远是验证传递给DataTables的信息,以便它不会有任何警告抛出... – KRyan 2012-08-13 20:36:15
该扩展没有为我做任何事......你有没有找到答案这个问题? – 2013-05-15 20:45:09
这个任何解决方案?我也面临同样的问题...谢谢 – Wangchao0721 2013-06-18 12:06:34