Webアプリにテーブルがあり、ユーザーがテーブル内の行をクリックしてデータ要素を選択できるようにするイベントハンドラーを実装しました。選択した要素を視覚的に強調するために、境界線を付けます。新しい行が選択されたら、選択したクラス(境界線)を古い要素から削除して、新しい要素に追加します。
イベントリスナーコードは正しく機能しているようです。chromeの開発ツールを使用して、クラスが古い要素から削除され、新しく選択された要素に追加されていることを確認しました。ただし、removeClass()が呼び出された後、ブラウザは境界線を正しく削除していません。
クロム(18.0.1025.151)でテストすると、新しく選択された要素は境界線付きで表示され、以前に選択された要素は引き続き境界線の一部を表示します(境界線の下部と右側の部分は引き続き描画されます)。FF 11でテストすると、同様の描画バグが発生します。Firefoxでは、新しく選択した行は、上部が表示されない境界線の左/右/下の部分のみを描画します。再描画が発生するイベント(ブラウザウィンドウのサイズ変更など)により、境界線描画の問題が修正されます。
誰かが問題の原因への情報/リンクを持っていますか?さらに重要なことに、ユーザーが新しい行を選択した後に実装できる回避策はありますか?
追加/削除されるCSSクラス
.uiSelectedLHPlanRow { border: 1px solid purple; }
HTML
<table id='lhPlansTable' class='uiLHPlansTable'>
</table>
(テーブルの行は動的に追加されます)TR形式:
'<tr id=\'' + GENERATED ID + '\' class=\'uiLHPlanTableRow\'><td class=\'uiLHPlanDriverTableCell\'>' + GENERATED DATA1 + '</td><td>' + GENERATED DATA2 + '</td></tr>'
イベントハンドラー
$('#lhPlansTable').on('click', 'tr.uiLHPlanTableRow', function () {
... flow control ...
$('.uiSelectedLHPlanRow').removeClass('uiSelectedLHPlanRow');
$(this).addClass('uiSelectedLHPlanRow');
// TODO: WORKAROUND FOR DRAWING BUG ??
}