修正方法がわからない IE のバグがあります。
jQueryを使用して、メニューを動的に移動して、マウスオーバーの要素に表示します。
私のコード(簡略化)は次のようになります。
$j = jQuery.noConflict();
$j(document).ready(function()
{
//do something on the menu clicks
$j('div.ico').click(function() { alert($j(this).parent().html()); });
setUpActions('#tableId', '#menuId');
});
//on mouseover set up the actions menu to appear on mouseover
function setUpActions(tableSelector, menuSelector)
{
$j(tableSelector + ' div.test').mouseover(function()
{
//note that append will move the underlying
//DOM element with all events from it's old
//parent to the end of this one.
$j(this).append($j(menuSelector).show());
});
}
このメニューは、IE7、IE8、および IE8-as-IE7 で移動された後、メニューのイベントを正しく登録していないようです (MS さん、これは IE8 の「新しいレンダリング エンジン」です)。
他のすべてで期待どおりに機能します。
こちらの基本的なデモで動作を確認できます。
デモでは、問題の 2 つの例を確認できます。
- ボタンの背後にある画像はホバー時に変更する必要があります (CSS :hover セレクターで行います)。最初のマウスオーバーで機能しますが、その後は持続します。
- クリック イベントは発生しませんが、開発ツールを使用して手動で呼び出すことができ、まだサブスクライブされています。
(2) は IE8 の開発ツールで確認できます。
- IE8でページを開く
- 開発ツールを開く
- 「スクリプト」タブと「コンソール」サブタブを選択します
- タイプ:
$j('#testFloat div.ico:first').click()
サブスクライブされたイベントを手動で呼び出す - ページにアラートが表示されます
これは、イベント サブスクリプションが失われていないことを意味します。イベント サブスクリプションはまだそこにあり、クリックしても IE がそれらを呼び出していないだけです。
このバグが発生する理由を知っている人はいますか (IE の由緒あるエンジンによるもの以外に)?
回避策はありますか?
たまたま他のすべてで期待どおりに機能するのは、私が間違っていることでしょうか?