0

私のWebアプリケーションには、ユーザーレコードのテーブルがあります。レコードはクライアント送信時に追加および削除され、ユーザーが保存ボタンをクリックしてサーバー上で行われたすべての操作を保存します。

テーブルの並べ替え機能にテーブルソーターを適用しました。しかし、驚くべきことに、ソートされた機能はIDフィールド、つまりテーブルの最初のフィールドでのみ正常に機能しますが、他のすべてのフィールドではエラーが発生します(chromeからのエラートレース)

Uncaught TypeError: Cannot read property 'type' of undefined
multisortjquery.tablesorter.js:600
$.extend.tablesorter.construct.each.$headers.click.mousedown.onselectstart 

これがテーブル構造です。

<table id="contentTable" class="tablesorter">
                        <thead>
                            <tr>
                                <th> ID </th>
                                <th> Name </th>
                                <th> Birth Date </th>
                                <th> City </th>
                                <th id="actionheader"> Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td></td>
                            </tr>
                        </tbody>
                    </table>

これでは、データを動的に追加します。この状況では、ソートは最初のフィールド、つまりIDフィールドに対してのみ正常に機能します。

これが私がtableSortingを初期化した方法です。

  function initializeTableSorting() {
        $("#contentTable").tablesorter({
            sortList : [[0, 0]],
            headers : {
                0 : {
                    sorter : "integer"
                },
                1 : {
                    sorter : "text"
                },
                2 : {
                    sorter : false
                },
                3 : {
                    sorter : "text"
                },
                4 : {
                    sorter : false
                }
            }
        });
    }

初期化からfalseオプションを削除した場合、日付フィールドでも、すべてのフィールドでこれを機能させるにはどうすればよいですか?

4

4 に答える 4

6

「まったく」同じ問題があり、それを回避する方法がわからない場合は、しばらく時間がかかりましたが、最終的に、データ内に空の行(有効な行が続く)をtableSorterに提供していることがわかりました。したがって、HTMLで有効なデータを確認できましたが、ソースでは、前の空の行を見逃していました...これはおそらくTableSorterJSを台無しにしていました。

最初の空の行を削除し (theadの後、他のデータの前)、この問題は解決されました。

于 2012-11-12T10:43:30.830 に答える
0

これは確かに奇妙な問題であり、はまったく機能していないようです(MacのChromeでは)。また、私はあなたの状況を再現しました、そして再び、間違ったソート。ただし、あなたが説明したエラーは発生しませんでした。

以前にTableSorterでこの問題が発生しましたが、当時は問題を特定できませんでした。正しく思い出せば、プラグインによって実行されるキャッシングと関係があります。

于 2012-05-04T07:13:08.313 に答える
0

報告されたエラーを複製することはできませんが、プログラミングロジックに従うと...

説明しているエラーは、次のコード行で発生します。

var s = (table.config.parsers[c].type == "text") ...

つまり、それparsers[c]は存在しません。変数cは単なる列インデックスです。

したがって、推測する必要がある場合は、カスタムパーサーが含まれていると思いますが、type属性が定義されていません。

// default text parser
ts.addParser({
    id: "text",
    is: function (s) {
        return true;
    },
    format: function (s) {
        return $.trim(s.toLocaleLowerCase());
    },
    type: "text"
});

または、の定義に問題がある可能性がありますsortList。変数の前後に正しい数の角かっこがあることを確認してください。

var sorting = [[0, 0]];
$("#contentTable").trigger("sorton", [sorting]);

または圧縮形式:

// more than one column -> [[ [0,0], [1,0] ]]
$("#contentTable").trigger("sorton", [[[0, 0]]]);

このデモをお試しください

于 2012-05-11T03:14:04.993 に答える
0

これはちょうど今私に起こりました。純粋な数値フィールドをソートしますが、テキストを介して何もしません。これらのテキスト列を押して並べ替えると、開発ツールコンソールに「未定義」エラーが返されました。

修正?私の無関係な関数の1つが未定義になってしまいました。

于 2016-04-11T19:41:52.847 に答える