1

ページのコンテンツを更新する livequery ハンドラーがいくつかあります。それらが起動した後にのみコンテンツを表示したいと思います(ユーザーがしばらく変更されていないバージョンを見るのを防ぐため)。コンテンツは通常の AJAX を使用して読み込まれます。

これまでのところ、次のことを試しました。

  1. html 経由で ajax を取得する
  2. 非表示にする (表示: 非表示)
  3. window.setTimeout(showContent, 100) - 可視性を可視に設定します

単一のタブに単一の JS スレッドがあるため、これは機能すると思いました。そのため、他のすべての操作が終了した後にタイマーが起動するはずです。また、FF & IE で動作します。ただし、Chrome では、JS がスレッド化されたか、タイムアウトによって中断されたかのように、変更されていないコンテンツがしばらく表示されることがあります。

それとも、私がやろうとしていることを達成するためのより良い方法がありますか? (タイムアウトなし)。

4

2 に答える 2

1
  • 成功コールバックを使用できます
  • または、javascript 自体を元に戻して dom に追加することもできます。(表示メカニズムを指定します:))
于 2011-02-07T09:38:37.937 に答える
0

livequery は内部的にタイムアウトを使用してライブ クエリを実行することが判明したため、タイムアウト メソッドの順序の問題でした。

したがって、ライブクエリキューがクリアされるまで待機することを解決しました(ユーザーがマウスに夢中で、常にイベントを生成している場合、いくつかの境界があります):

function run_after_livequery(method) {
    var tries = 0;
    function run_if_livequery_done() {
        if (!$.livequery.queue.length || tries >= 20) {
            method();
        } else {
            window.setTimeout(run_if_livequery_done, 50);
            tries++;
        }
    }

    window.setTimeout(run_if_livequery_done, 50);
}
于 2011-02-07T12:32:55.193 に答える