10

jQuery load コマンドを使用してロードするテーブルがあります。load 関数のコールバックで、tablesorter プラグインを開始します。何らかの理由で、テーブルは昇順ではなく降順でのみソートされます。さらに奇妙なことに、シフトを押したままにすると、昇順と降順が正しく切り替わりますか? ここで何が起こっているのか分かりますか?

table.php

<table id="xyz">
<thead>
    <tr>
        <th>hi</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td>a</td>
    </tr>
    <tr>
        <td>b</td>
    </tr>
    <tr>
        <td>c</td>
    </tr>
</tbody>
</table>

jquery

$("#myDiv").load("table.php", function() {
    $("#xyz").tablesorter();
});

ajaxを介してテーブルをロードしない場合、テーブルソーターは期待どおりに機能します。

4

5 に答える 5

11

さて、ジェイソンが思ったように私はダブルバインドでした。

私は実際にクラスでjQueryのload関数を呼び出していましたが、ページにそのクラスで2つのdivがありました。それで、実際にはコールバック関数を2回呼び出していたのでしょうか。

両方のdivに読み込まれるコンテンツが同じであるため、これは一種の奇妙な動作だと思いますが、jQueryは各divに対して個別のajax呼び出しを行うようです。コメントしてくれてありがとう!

于 2012-06-04T16:33:59.603 に答える
5

もう一度、これがどのように解決されたかを見て、私の別のシナリオを共有したいと思います.

テーブル本体の行は呼び出しから動的に作成され.ajax、ユーザーが行を追加/変更/削除すると、テーブル本体の行が.removed()作成され、同じ.ajax呼び出しでfunction(). テーブルヘッドが残っているため、これはもちろんテーブルソーターを二重バインドし、奇妙な動作を引き起こします。

私にとっての修正は、次の$('#mytable').addClass('tablesorter').tablesorter();ように初期化する前にテーブルソーターのバインドを解除することでした。

$('#mytable')
    .unbind('appendCache applyWidgetId applyWidgets sorton update updateCell')
    .removeClass('tablesorter')
    .find('thead th')
    .unbind('click mousedown')
.removeClass('header headerSortDown headerSortUp');

もう 1 つの修正方法は.ajax、body だけでなく、呼び出しでテーブル全体を作成すること<tr>です。

お役に立てれば

于 2013-12-05T16:41:16.000 に答える
1

私は同じ問題を抱えていましたが、セットアップが異なりました。このスレッドに記載されている回答では問題は解決しませんでした。他の誰かが私と同じ問題を抱えている場合に備えて、私のシナリオの解決策を追加します。

テーブル本体の行は、ページの読み込み時に .ajax 呼び出しから動的に作成され、1 つの列がデフォルトの sortList として設定され、データが読み込まれた後に並べ替えられます。

新しい日付範囲の送信に基づいて、10 列のうち 5 列が再入力されます。テーブル本体を再構築するのではなく、適切なレコードにデータを挿入してから、デフォルトの sortList に基づいて並べ替えます。

私の問題は、新しい日付範囲を送信した後、tablesorter がヘッダーで 2 回定義されたため、ヘッダーをクリックすると 2 回ソートされ、一方向にしかソートされないように見えることでした。

私の解決策は、tablesorter ヘッダーが 2 回初期化されないようにすることでした。ページの読み込み時に、設定した sortList プロパティで設定した 1 つの列を tablesorter で並べ替えますが、新しい日付範囲が送信されるたびに、データの読み込み後に次の行を使用して列を並べ替えます。

$('#mytableBody').trigger("update");
var sorting = [[5, 1]];
setTimeout(function () {$('#mytableBody').trigger('sorton', [sorting]) }, 1);

setTimeout を使用して、並べ替えの前にデータが完全に読み込まれるようにします。

お役に立てれば。

于 2015-02-14T00:15:27.020 に答える
1

問題はすでに解決されていますが、同じ問題があったことを述べておきます。その理由は古いバージョンのjqueryにありました.1.4.2があり、1.4.4が必要でした.

于 2013-01-22T20:21:49.847 に答える