1

ファイルa.phpにはjQuery Tablesorterテーブルが含まれています。これはテーブルソーターのコードです:

 $("#feedsTable thead").live("click", function() {
       $("#feedsTable").tablesorter({
                widthFixed : true,
                dateFormat : "uk",
            }).tablesorterPager({
                container : $("#pager"),
                positionFixed : false
            });
        });

テーブルの HTML コードを少し削除:

<div id="tablica">
    <article class="module width_full">
        <div id="pager">
            <form>
                [snip]tablesort pager stuff... 
            </form>
        </div>
        <table id="feedsTable" class="tablesorter" cellspacing="0">
            <thead>
                <tr>
                    [snip]table header row...
                </tr>
            </thead>
            <tbody> ... PHP printed table data

また、ファイルにはリンクa.phpが含まれており、クリックすると、次のコードを含むファイルが呼び出されます(基本的に、テーブルを新しい要素で出力し、関数を使用して古いテーブルを新しいテーブルに置き換えます)。refreshb.php$("#tablica").load("a.php #tablica");b.phpload

もちろん、コードが実行されるとTablesorterが機能しないため、代わりにjQueryliveまたはdelegate(これに何らかの問題があり、Tablesorterを機能させることができないため、live代わりに使用しています)関数を使用する必要があります新しいテーブル データ。(document).readyload

しかし問題は、jQuerylive()関数を使用する場合、Tablesorter プラグインを使用できるようにするために 2 回クリックする必要があることです。最初のクリックでプラグインが「アクティブ化」され、テーブル ヘッダーが 2 回目にクリックされると、テーブルが並べ替えられ、うまく機能します。

ではa.php、このコードを追加できます

$(document).ready(function() {
    $("#feedsTable thead").click();
});

プラグインを「アクティブ化」し、ユーザーがテーブル ヘッダーを最初にクリックすると、テーブルが並べ替えられます。しかし、ファイルに追加$("#feedsTable thead").click();してリンクをクリックすると、この「ハック」は機能せず、新しいデータを含むテーブルがロードされた後に Tablesorter プラグインを使用できるようにするには、2 回クリックする必要があります。b.phprefresh

基本的に、質問は次のとおりです。私は Tablesorter が jQuery を使用するときに最初のクリックで動作しlive、2 回目だけでなく動作することを望みます。それを修正する方法は?

どんな助けでも大歓迎です!

ありがとう。

4

2 に答える 2

1

「もちろん、jQuery ライブまたはデリゲートのいずれかを使用する必要があります」

http://api.jquery.com/live/ : jQuery 1.7 以降、.live() メソッドは廃止されました。.on() を使用して、イベント ハンドラーをアタッチします。古いバージョンの jQuery のユーザーは、.live() よりも .delegate() を使用する必要があります。

on() を試して、大きな違いがあるかどうかを確認してください。そうでない場合は、他の何かが働いています。

于 2012-05-31T17:16:09.793 に答える
0

したがって、その中のすべての内容が関数によって完全に置き換えられているdelegateテーブルをターゲットにしているため、機能しません。デリゲートは、バブリングイベントを検出するために「アンカー」要素を必要としますが、ドキュメントを使用すると思います。したがって、それが書かれている方法では、ユーザーがtheadのどこかをクリックすると、tablesorterが初期化されます。tablesorterがアクティブであるため、2回目のクリックで実際に列がソートされます。#tablicaloadlive

とにかく、解決策は、loadコールバック関数内でテーブルソーターを初期化することです。したがって、ライブ関数を完全に削除して、これを試してください。

$("#tablica").load("a.php #tablica", function(){
    $("#feedsTable").tablesorter({
        widthFixed : true,
        dateFormat : "uk",
    }).tablesorterPager({
        container : $("#pager"),
        positionFixed : false
    });
});

これで、ユーザーがテーブルヘッダーをクリックすると、コンテンツがロードされた直後にtablesorterが初期化されるため、ソートされます。

于 2012-05-31T17:22:30.247 に答える