2

私は、テーブルがソートされる前に追加の処理を行うためのイベントを含むjQueryテーブルソートプラグインを使用しています(そして貢献しています)。もともとブラウザはソート前に再描画を行わなかったので、再描画を強制するプラグインコードにsetTimeout呼び出しを追加しました。したがって、コードは次のようになります。

$table.trigger("beforetablesort", {column: th_index, direction: sort_dir});

setTimeout(function() {
  // do the hard work
}, 10);

私のbeforetablesortコールバックは次のようなものです:

table.bind('beforetablesort', function (event, data) {
  $("table").css({opacity: 0.5});
});

上記はすべて正常に動作します。ただし、addClassインラインスタイルの代わりに使用すると、テーブルが完全に並べ替えられるまで、そのクラスからの変更は表示されません。

table.bind('beforetablesort', function (event, data) {
  $("table").addClass('disabled');
});

タイムアウトを500ms以上に増やすと、不透明度が変わります。インラインスタイルの変更とは対照的に、クラスの変更が表示されるまでに少し時間がかかるようです。しかし、ブラウザが再描画の準備ができるまでに、ブラウザはすでにテーブルの並べ替えを行っています。

早めに塗り直しを強制する方法はありますか?または、テーブルの並べ替えコードが実行されるまで再描画するまで待ちますか?タイムアウトを任意に増やすと、すべてのテーブルの並べ替えに少なくとも0.5秒かかるため、適切な解決策とは思えません。(プラグインの完全なコードは、役立つ場合はGithubにあります。)

4

2 に答える 2

0

$ .deferred()http://api.jquery.com/jQuery.Deferred/の使用をすでに検討しているかもしれません。遅延オブジェクトが解決されると、タイムアウトのコードはコールバックハンドラーに入る必要があります

于 2013-02-23T19:10:49.777 に答える
0

上記のJanDvorakによるコメントは機能します。

計算されたプロパティを読み取ると、リフローが待機します。うまくいけば、それは同様に再塗装を確実にするでしょう。

行を追加したところ$table.css("display");、並べ替えが開始される前にブラウザがテーブルを再描画しました。

于 2013-04-18T23:18:37.153 に答える