回答:
jQuery 1.4.1がlive()イベントの「ホバー」をサポートするようになりましたが、イベントハンドラー関数は1つだけです。
$("table tr").live("hover",
function () {
});
または、2つの関数を提供することもできます。1つはmouseenter用、もう1つはmouseleave用です。
$("table tr").live({
mouseenter: function () {
},
mouseleave: function () {
}
});
live
:api.jquery.com/live
.live
ドキュメントページでは使用することを言う.on
代わりに。「jQuery 1.7以降、.live()メソッドは非推奨になりました。.on()を使用してイベントハンドラーをアタッチしてください。」
$('.hoverme').live('mouseover mouseout', function(event) {
if (event.type == 'mouseover') {
// do something on mouseover
} else {
// do something on mouseout
}
});
.live
は現在非推奨です。置換方法については、Andreの回答をご覧ください。
mouseover
とmouseout
イベントを使用すると、ユーザーが要素内でマウスを動かしたときにコードが継続的に起動します。エントリー時に一度だけ発砲するのでmouseenter
、私mouseleave
はより適切だと思います。
.live()
jQuery 1.7で非推奨になりました
.on()
代わりに使用して、子孫セレクターを指定してください
$("table").on({
mouseenter: function(){
$(this).addClass("inside");
},
mouseleave: function(){
$(this).removeClass("inside");
}
}, "tr"); // descendant selector
このコードは機能します:
$(".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では、メニューが遅くなる(ドロップするまでに数秒間ホバーする必要があった)だけでなく、スクロールや単純なチェックボックスのチェックなど、ページ上のすべてが非常に遅くなりました。
ロード後にイベントを直接バインドすると、適切なパフォーマンスが得られました。