6

ページ上に、MoveUp、MoveDown、および Delete の一連のコントロールを含むアイテムのリストがあります。

コントロールは、デフォルトでは非表示のリストの一番上にあります。アイテム行にマウスオーバーすると、jquery でコントロールが選択されます

//doc ready function:
..
var tools = $('#tools');
$('#moveup').click(MoveUp);
$('#movedn').click(MoveDn);
$('#delete').click(Delete);
..
$('li.item').mouseover(function(){
    $(this).prepend(tools);
});

これは Firefox でうまく機能します。ツールは現在の行に移動し、クリック イベントは ajax 関数を呼び出します。ただし、IE6 および IE7 では、クリックは発生しません。マウスアウトでバインドを解除し、マウスオーバーごとに再バインドしようとしました..役に立たなかった。

また、javascript 以外のさまざまな理由 (透明な png の競合、z-index、position:absolute など) も調べましたが、解決策も見つかりませんでした。

最終的には、各アイテムにツール行を追加し、マウス オーバー/アウトで表示/非表示にする必要がありました。同様に機能します。唯一の欠点は、ページに「ツール」マークアップがはるかに多いことです。

オブジェクトが移動されると(プリペンドを使用して)IEがマウスイベントを無視/ドロップ/強制終了する理由を誰かが知っていますか? そして、後でイベントを再バインドしても効果がないのはなぜですか? あきらめる前に、ほぼ2時間イライラしました。

4

3 に答える 3

8

IE は、DOM への追加方法に応じてイベントを失います。

var ele = $("#itemtocopy");

$("#someotheritem").append( ele ); // Will not work and will lose events

$("#someotheritem").append( ele.clone(true) );

コードを少し簡素化するために、クリック イベントで .live() を使用することもお勧めします。ライブでは、マウスオーバー/アウトはまだサポートされていません。http://docs.jquery.com/Events/live

于 2009-05-08T02:06:42.230 に答える
2

DOMに追加されたアイテム(IE7、jQuery 1.4.1)でトリガーされないイベントのトラブルシューティングに一日を費やしましたが、live()を使用する必要があったためではありませんでした(ただし、知っておくと便利です、Chad)。アイテムのクローンを作成する必要があったためです。

これは、次のように「#」が含まれるアンカータグを選択していたためです。

var myitem = $('a[href=#top]');

私の解決策は、次のように「属性にはセレクターが含まれています」を使用することでした。

var myitem = $('a[href*=top]');

幸いなことに、私はすべてを十分に制御できるので、将来壊れることはないでしょう。これは、技術的には追加されたオブジェクトとは関係ありませんが、誰かの時間を節約できることを願っています。

于 2010-02-10T05:10:06.253 に答える