常見問題
DataTables 是一個複雜的軟體,使用時無疑會出現問題。其中一些問題已經被提出並得到解答,最常見的問題顯示在此。
尋求協助
問:我有問題 - 如何獲得幫助?
答:取得 DataTables 幫助的最佳地點是在本網站上。在手冊、參考資料、範例、這些常見問題和論壇中,都有關於 DataTables 的詳盡文件。如果您無法在網站上找到問題的答案,請將其發佈在論壇中。當發佈有關現有表格的問題時,請連結到顯示問題的測試案例,或至少使用DataTables 除錯器來提供有關表格的資訊。
問:我需要盡快獲得這個問題的答案!
答:像平常一樣在論壇中發佈您的問題,然後使用支援頁面購買 DataTables 的支援方案。購買支援可確保您獲得針對您所遇到問題的協助,同時也有助於整體支援 DataTables 專案。
問:我預計多久可以收到我的論壇貼文的回覆?
答:確保您獲得問題回覆的最佳方法是購買支援選項。發佈測試案例也將確保提供問題所需的所有資訊。回覆時間當然會有所不同,但通常會在一天內回覆,但有時可能需要更長的時間。如果發生這種情況,請不要介意!
最常見的常見問題
問:我收到錯誤訊息,指出 API 方法不可用
答:很可能您使用的是 jQuery 物件而不是 DataTables API 執行個體。$().dataTable()
形式會傳回 jQuery 物件,而 $().DataTable()
會傳回 DataTables API 執行個體。請參閱 API 文件以取得更多資訊。
問:我的事件在第二頁上無法運作
答:當您將事件附加到由 DataTables 控制的表格中的儲存格時,您需要小心如何執行此操作。由於 DataTables 從 DOM 中移除節點,因此使用靜態事件監聽器套用的事件可能無法將自身繫結到表格中的所有節點。為了克服這一點,只需使用 jQuery 委派事件監聽器選項,如此範例中所示。此外,您可以使用我的Visual Event書籤小工具來協助偵錯事件問題。
問:我收到 JSON 剖析錯誤
答:這是由於從伺服器傳回了不正確的 JSON 資料所致。請參閱此技術注意事項,了解如何偵錯和解決此問題。
問:「請求未知的參數」錯誤
答:當 DataTables 請求表格資料來源中不存在的屬性時,您會收到此錯誤。這可能是由於指定了不正確的欄數、遺失的參數以及主體中的 colspan/rowspan 所致。請參閱此技術注意事項,了解如何偵錯和解決此問題。
問:我在 IE 中收到 Javascript 錯誤,但在 Firefox、Chrome 等中沒有
答:大多數情況下,這是由於陣列末尾的「浮動」逗號所致。IE 會針對此情況發出警告,其他瀏覽器會自動刪除它。
問:我使用 DOM/jQuery 將列附加到表格,但在重新繪製時會將其移除。
答:這裡的問題是 DataTables 不知道您對 DOM 結構的操作,也就是說,它不知道您新增了一列,當它重新繪製時,它會移除未知的列。若要從 DataTable 新增、編輯或刪除資訊,您必須使用DataTables API (特別是row.add()
、row().data()
和 row().remove()
方法來新增、編輯和刪除列。
問:DataTables 是否適用於平台 X / 伺服器架構 Y
答:DataTables 是一個 Javascript 函式庫,因此伺服器端環境並不重要。只要它可以建構有效的 HTML 或 JSON,DataTables 就可以透過 Ajax 讀取,它就可以運作。
問:如果我修改 HTML,為什麼表格不會更新?
答:這與上一個問題類似。當您初始化 DataTable 時,表格的內容會快取以進行速度最佳化,因此在此之後對 HTML 進行的任何變更都不會反映在 DataTable 中。若要更新表格,請使用下列其中一種 API 方法:cell().data()
、cells().data()
、row().data()
或 rows().data()
。如果您無法避免直接更新 HTML,您可以使用 cell().invalidate()
和 row().invalidate()
(或其複數等效項) 使該儲存格或列的快取失效,或者您可以使用 destroy()
銷毀 DataTable 並重新初始化。
問:我如何排序日期和時間?
答:日期和時間有各種不同的格式,從電腦可讀取的格式到特定於地區的格式。DataTables 內建支援 ISO6801 格式化的日期和時間,並具有自動地區格式化功能,並透過與 Moment.js 和 Luxon 的整合來支援格式化的日期和時間。DataTables 理解您的日期/時間資訊的正確方法取決於資料的載入和顯示方式。
問:我如何在第三次按一下欄標題時保持表格排序?
答:依預設,DataTables 會循環執行遞增排序、遞減排序和不排序,並視需要重複執行。這由 columns.orderSequence
選項控制。您可以選擇性地為特定欄停用該選項,但若要完全停用頁面上所有表格的該選項,您可以將預設值設定為在columns.orderSequence
文件中顯示。
一般初始化
問:DataTables 執行速度很慢。我該如何加快速度?
答:您可以使用幾種方法來加快 DataTables 的速度。通常,首先要做的是啟用分頁 (paging
),如果已停用,因為這只會減少要顯示的資料量。同樣值得注意的是,對於具有大量欄的表格,捲動 (scrollX
和 scrollY
) 會對繪製效能產生重大影響,因為它會涉及計算。除此之外,您用於載入資料的方法通常對效能具有最顯著的影響。
- 用戶端處理 - DOM 來源資料:約 5'000 列。速度選項:
orderClasses
。 - 用戶端處理 - Ajax 來源資料 (
ajax
):約 50'000 列。速度選項:deferRender
- 伺服器端處理 (
serverSide
):數百萬列。
請注意,較舊的瀏覽器 (例如 IE6/7) 可能具有低於上面給出的數字。此外,如果您使用的是 Firefox 並使用 Firebug,請關閉 Firebug,因為這可能會對效能產生負面影響。
問:我的表格無法運作!?
答:您是否已定義 DataTables 需要的 thead
和 tbody
(手冊 - 安裝)?您的 HTML 是否有效 (W3C 驗證器)?您是否看到任何 Javascript 錯誤?
問:我的樣式未顯示 / 我的表格未設定樣式。
答:您是否已在頁面上包含 DataTables 的示範 CSS (並且路徑正確!)?
問:我如何移動表格控制項?
答:您可以使用 dom
初始化參數來移動 DataTables 放置在表格周圍的元素。
問:我可以在 Ajax 加載的 JSON 中定義我的欄位嗎?
答:目前這不是 DataTables 的原生功能(儘管未來可能會加入)。您需要使用 $.ajax
加載 JSON 資料,並使用 columns
選項指定欄位定義陣列。
問:當使用 Buttons 時,我如何顯示頁面長度 select
?
答:當您使用舊式的 dom
選項將 Buttons 插入頁面,但 dom
字串中的 l
字元被移除時(在許多 Buttons 範例中都是如此),就會出現這個問題。您可以使用 pageLength
按鈕來插入頁面長度按鈕列表,或者將 l
選項重新加回 dom
字串中。
當您使用 layout
選項,且將 topStart
位置用於預設的 pageLength
以外的其他用途時,也可能發生此問題。請使用其他版面配置位置來放置該功能,或是使用 pageLength
,或使用陣列在 topStart
位置加入多個項目。
伺服器端處理
問:它無法運作...(停留在處理中)
答:這通常是因為伺服器傳回不正確的 JSON 資料。請參閱此技術說明,了解如何偵錯和解決此問題。
問:它仍然無法運作...
答:伺服器端處理無法運作的第二個最常見原因是 draw
變數未按照請求中的設定值返回。DataTables 使用 draw
來保持繪圖計數,因此這是一個重要的參數。請參閱伺服器端使用方式。
問:分頁未啟用,或資訊文字顯示的資料集計數不正確
答:這很可能是由於 recordsFiltered
的使用不正確所導致。recordsFiltered
是篩選後資料集中記錄的總數,而不是資料陣列的長度(DataTables 可以自行計算!)。因此,如果您沒有進行篩選,recordsFiltered
應該與 recordsTotal
完全相同。請參閱伺服器端使用方式。
問:我的事件沒有被應用
答:實際情況是,每次繪圖時,DataTables 都會建立所需的顯示節點(TR、TD 等),因此舊的事件會遺失。您可以選擇使用委派事件(較佳),如同此範例,或是使用 drawCallback
在每次繪圖時重新新增事件。您也可以使用 Visual Event 書籤來協助偵錯事件問題。
問:當使用 serverSide
和 Buttons 時,我如何匯出整個表格?
答:Buttons 是用戶端處理程序,因此它只能匯出用戶端可用的資料。當啟用伺服器端處理時,完整的資料集並未保留在用戶端,因此只能匯出可見的資料。您可以選擇:1. 使用伺服器端處理程序來建立要下載的檔案(建議 - 下載外掛 Button 可能會有所幫助)或 2. 停用伺服器端處理。
SearchPanes
問:當 SearchPanes 作為按鈕使用時,無法設定
答:當使用按鈕設定 SearchPanes 時,SearchPanes 的設定需要放在按鈕的 config 屬性內,而不是在 DataTables 的設定中。此範例說明如何做到這一點。
問:沒有顯示任何窗格
答:當發生這種情況時,很可能是因為您表格中的資料太過獨特。SearchPanes 使用 searchPanes.threshold
來計算是否要顯示欄位的窗格。為了強制窗格隱藏或顯示,最好使用 columns.searchPanes.show
設定選項。
問:CascadePanes 無法運作 / CascadePanes 造成問題
答:searchPanes.cascadePanes
是 SearchPanes 中最複雜的部分。不幸的是,隨之而來的是一些我們目前無法支援的邊緣案例。如果您發現自己提出這個問題,很可能是您正在執行下列任何/一些不受支援的操作。
searchPanes.cascadePanes
和columns.searchPanes.preSelect
- 這不受支援,因為為了使 cascade 能夠如預期般運作,需要以正確的順序進行選擇。目前無法使用 preSelect 來指示這一點。searchPanes.cascadePanes
、serverSide
和stateSave
。儘管 SearchPanes 和 cascade 仍然可以在啟用所有這些選項的情況下執行,但頁面重新載入時向使用者顯示的選項很可能不是預期的結果。同樣,SearchPanes 需要以正確的順序進行選擇才能做到這一點,並且發送到伺服器的初始請求僅返回篩選後的選項,沒有辦法確定應該以什麼順序進行選擇。searchPanes.cascadePanes
和columns.searchPanes.combiner
。當一起使用這些選項時,您必須確保表格中的資料適用於您所做的選擇。cascade 的開發是以預設的or
邏輯為考量,使用and
邏輯在大多數情況下都可以正常運作,但可能會發生非預期的結果。- 當透過 ajax 加載 SearchPanes 選項,但使用用戶端處理時,不支援
searchPanes.cascadePanes
或searchPanes.viewTotal
。這是因為使用者最初提供的資料很可能很快就會變得不準確。這反過來會導致非預期的行為。
授權
問:DataTables 很棒!它要多少錢?
答:DataTables 是免費的開源軟體,您可以下載並用於任何目的,在您想要的任何網站上使用,且不限數量。您可以免費使用它!DataTables 是在 MIT 許可下提供的,您必須遵守該許可(要做到這一點,基本上請保留軟體中的版權聲明)。
問:真的嗎 - 即使是商業網站也是免費的?!
答:是的!我對 DataTables 取得的成就以及幫助它發展到今天的優秀社群感到非常自豪,並且我很高興將它作為開源軟體提供。顯然,如果您從 DataTables 中受益,那麼任何回報都非常歡迎,例如為 DataTables 建立外掛程式(將您的程式碼發佈在論壇中)、購買贊助者套件或發佈一篇部落格文章,說明您喜歡使用 DataTables。
問:我們無法使用 MIT 授權的軟體。我們該怎麼辦?
答:如果您在極少數情況下無法在其可用許可下使用 DataTables,請聯繫我們討論其他授權安排。
開發常見問題
- 在您的部落格上寫關於 DataTables 的文章並廣為宣傳!
- 為 DataTables 建立外掛程式,可以在此網站上展示。
- 在論壇中回答支援問題。
- 為您發現的任何錯誤提供修補程式。
- 測試錯誤!
問:我建立了一個外掛程式 - 我如何與其他人分享?
答:請直接發送給我,或將其發佈在論壇中。
問:我想我發現了一個錯誤 - 我如何回報它?
答:請將您的錯誤,以及展示如何重現該問題的完整測試案例發佈在論壇中。