jqueryライブホバー


161

次のjqueryコードを使用して、マウスでホバーしているテーブル行に対してのみコンテキスト削除ボタンを表示しています。これは機能しますが、オンザフライでjs / ajaxで追加された行では機能しません...

ライブイベントでこれを機能させる方法はありますか?

$("table tr").hover(
  function () {},
  function () {}
);

回答:


245

jQuery 1.4.1がlive()イベントの「ホバー」をサポートするようになりましたが、イベントハンドラー関数は1つだけです。

$("table tr").live("hover",

function () {

});

または、2つの関数を提供することもできます。1つはmouseenter用、もう1つはmouseleave用です。

$("table tr").live({
    mouseenter: function () {

    },
    mouseleave: function () {

    }
});

それでも私にはうまくいきません。私はこれを試してみました:どこが間違っているのですか?> $( 'table tr')。live( 'hover'、function(){$(this).find( '。deletebutton')。toggle();});
シュリパッドクリシュナ

1
これは正しくなく、機能しません。ドキュメントの下に、「複数のイベント」ヘッダを参照してくださいliveapi.jquery.com/live
ジェイソン

34
jQueryの1.4.2のとおり、.live( "ホバー")は( "のMouseEnter mouseleave")、( "マウスオーバー、マウスアウト").liveませ.liveと等価である-を参照しbugs.jquery.com/ticket/6077だから、やります。 live( "mouseenter mouseleave"、function(){...})、または.live( "mouseenter"、function(){...})。live( "mouseleave"、function(){...})
2010年

2
@aemありがとう、これは私にとってうまくいきました:$( "table tr")。live( "mouseenter"、function(){...})。live( "mouseleave"、function(){...});
jackocnr

3
あたりとしてはJQueryの.liveドキュメントページでは使用することを言う.on代わりに。「jQuery 1.7以降、.live()メソッドは非推奨になりました。.on()を使用してイベントハンドラーをアタッチしてください。」
johntrepreneur 2013年

110
$('.hoverme').live('mouseover mouseout', function(event) {
  if (event.type == 'mouseover') {
    // do something on mouseover
  } else {
    // do something on mouseout
  }
});

http://api.jquery.com/live/


私のためにも働いた。+1マウスオーバーとマウスエンターの両方で、フィリップのバージョンを試してみました-どちらも機能しませんでした。しかし、これはしました。ありがとう!
eduncan911 2010

.liveは現在非推奨です。置換方法については、Andreの回答をご覧ください。
johntrepreneur 2013年

1
ここでmouseovermouseoutイベントを使用すると、ユーザーが要素内でマウスを動かしたときにコードが継続的に起動します。エントリー時に一度だけ発砲するのでmouseenter、私mouseleaveはより適切だと思います。
johntrepreneur 2013年

60

.live() jQuery 1.7で非推奨になりました

.on()代わりに使用して、子孫セレクターを指定してください

http://api.jquery.com/on/

$("table").on({
  mouseenter: function(){
    $(this).addClass("inside");
  },
  mouseleave: function(){
    $(this).removeClass("inside");
  }
}, "tr");  // descendant selector

6
これは、jquery 1.9以降、問題なく動作します。すべてのライブおよびデリゲートソリューションは非推奨です。誰かが受け入れられた回答を受け入れずに、代わりにこれを受け入れることができればそれは素晴らしいでしょう。
jascha 2013年

5

jQuery 1.4.1以降、hoverイベントはで動作しlive()ます。基本的に、mouseenterイベントとmouseleaveイベントにバインドします。これは、1.4.1より前のバージョンでも同様に実行できます。

$("table tr")
    .mouseenter(function() {
        // Hover starts
    })
    .mouseleave(function() {
        // Hover ends
    });

これには2つのバインドが必要ですが、同様に機能します。


5

このコードは機能します:

    $(".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");
            }
        });

2
「ui-state-hover」とは何ですか?それはユーザーの元の質問にどのように適用されますか?
IgorGanapolsky

2

警告:ホバーのライブバージョンでは、パフォーマンスが大幅に低下します。IE8の大きなページで特に目立ちます。

私はAJAXでマルチレベルのメニューをロードするプロジェクトに取り組んでいます(私たちには理由があります)。とにかく、Chromeでうまく機能するホバーにライブメソッドを使用しました(IE9では問題ありませんでしたが、うまくいきませんでした)。ただし、IE8では、メニューが遅くなる(ドロップするまでに数秒間ホバーする必要があった)だけでなく、スクロールや単純なチェックボックスのチェックなど、ページ上のすべてが非常に遅くなりました。

ロード後にイベントを直接バインドすると、適切なパフォーマンスが得られました。


2
便利ですが、回答よりもコメントです。
mikemaccana
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.