目的
テーブルセルにカーソルを合わせると、テーブルセルの右上隅に小さな虫眼鏡アイコンが表示されます。虫眼鏡アイコンの上にマウスを置いてクリックすると、ダイアログウィンドウが開き、その特定のテーブルセル内のアイテムに関する詳細情報が表示されます。毎回再作成せずに、同じアイコンを何百ものテーブルセルに再利用したいと思います。
部分的な解決策
<span>
絶対に配置され、隠されているシングルを持っています。_previewable
テーブルセルにカーソルを合わせると、が<span>
正しい場所に移動して表示されます。これ<span>
もDOM内で移動され、_previewable
テーブルセルの子になります。これにより、に接続されたクリックハンドラーが親<span>
を検索し_previewable
、ダイアログのコンテンツを設定するために使用されるjquery data()オブジェクトから情報を取得できるようになります。
これが私のHTMLの非常に単純化されたバージョンです:
<body>
<span id="options">
<a class="ui-state-default ui-corner-all">
<span class="ui-icon ui-icon-search"></span>
Preview
</a>
</span>
<table>
<tr>
<td class="_previewable">
<img scr="user_1.png"/>
<span>Bob Smith</span>
</td>
</tr>
</table>
</body>
そしてこのCSS:
#options {
position: absolute;
display: none;
}
このjQueryコードを使用すると:
var $options = $('#options');
$options.click(function() {
$item = $(this).parents("._previewable");
// Show popup based on data in $item.data("id");
Layout.renderPopup($item.data("id"),$item.data("popup"));
});
$('._previewable').live('mouseover mouseout',function(event) {
if (event.type == 'mouseover') {
var $target = $(this);
var $parent = $target.offsetParent()[0];
var left = $parent.scrollLeft + $target.position().left
+ $target.outerWidth() - $options.outerWidth() + 1;
var top = $parent.scrollTop + $target.position().top + 2;
$options.appendTo($target);
$options.css({
"left": left + "px",
"top": top + "px"
}).show();
}
else {
// On mouseout, $options continues to be a child of $(this)
$options.hide();
}
});
問題
このソリューションは、テーブルの内容がAJAXを介して再ロードまたは変更されるまで完全に機能します。<span>
はからセルの子になるように移動されたため<body>
、AJAX呼び出し中にスローされて置き換えられます。したがって、私の最初の考えは、次の<span>
ように、テーブルセルのマウスアウトで本体に戻ることです。
else {
// On mouseout, $options is moved back to be a child of body
$options.appendTo("body");
$options.hide();
}
ただし、これにより、<span>
マウスオーバーするとすぐに消えます。がテーブルセルの子であり、テーブルセルの境界内に完全に表示されている場合でも_previewable
、マウスがに移動すると、mouseoutイベントが呼び出されるようです。現時点では、これはChromeでのみテストしています。<span>
<span>
_previewable
_previewable
質問
_previewable
マウスがまだの境界内にあるのに、なぜmouseoutが呼び出されるの_previewable
でしょうか。<span>
絶対に配置されているからですか?<span>
各AJAXテーブルの参照でクリックハンドラーを再作成せずに、これを機能させるにはどうすればよいですか?