注意:此答案適用於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