次のjqueryコードを使用して、マウスでホバリングしているテーブル行に対してのみコンテキスト削除ボタンを表示しています。これは機能しますが、その場でjs/ajaxで追加された行では機能しません...
これをライブイベントで機能させる方法はありますか?
$("table tr").hover(
function () {},
function () {}
);
次のjqueryコードを使用して、マウスでホバリングしているテーブル行に対してのみコンテキスト削除ボタンを表示しています。これは機能しますが、その場でjs/ajaxで追加された行では機能しません...
これをライブイベントで機能させる方法はありますか?
$("table tr").hover(
function () {},
function () {}
);
jQuery 1.4.1 は live() イベントの "hover" をサポートするようになりましたが、イベント ハンドラー関数は 1 つだけです。
$("table tr").live("hover",
function () {
});
または、mouseenter 用と mouseleave 用の 2 つの関数を提供することもできます。
$("table tr").live({
mouseenter: function () {
},
mouseleave: function () {
}
});
$('.hoverme').live('mouseover mouseout', function(event) {
if (event.type == 'mouseover') {
// do something on mouseover
} else {
// do something on mouseout
}
});
.live()
jQuery 1.7 で非推奨になりました
代わりに使用.on()
し、子孫セレクターを指定します
$("table").on({
mouseenter: function(){
$(this).addClass("inside");
},
mouseleave: function(){
$(this).removeClass("inside");
}
}, "tr"); // descendant selector
jQuery 1.4.1 以降、ホバー イベントは で動作しlive()
ます。基本的には、mouseenter および mouseleave イベントにバインドするだけで、1.4.1 より前のバージョンでも同様に実行できます。
$("table tr")
.mouseenter(function() {
// Hover starts
})
.mouseleave(function() {
// Hover ends
});
これには 2 つのバインドが必要ですが、同様に機能します。
このコードは機能します:
$(".ui-button-text").live(
'hover',
function (ev) {
if (ev.type == 'mouseover') {
$(this).addClass("ui-state-hover");
}
if (ev.type == 'mouseout') {
$(this).removeClass("ui-state-hover");
}
});
警告: ホバーのライブ バージョンでは、パフォーマンスが大幅に低下します。IE8 の大きなページでは特に顕著です。
私は、AJAX を使用してマルチレベル メニューをロードするプロジェクトに取り組んでいます (理由があります :)。とにかく、Chromeでうまく機能するホバーにライブメソッドを使用しました(IE9は問題ありませんでしたが、うまくいきませんでした)。ただし、IE8 では、メニューの速度が低下しただけでなく (ドロップするまでに数秒間ホバーする必要がありました)、スクロールや単純なチェックボックスのチェックなど、ページ上のすべての動作が非常に遅くなりました。
ロードした直後にイベントをバインドすると、適切なパフォーマンスが得られました。