0

ページ上のすべての要素の mouseenter / mouseleave イベントを追跡する必要があります。

直感的に書かれたコードは次のとおりです。

$(window).on('mouseenter mouseleave', function(e) {
  console.log(e.target, e.type);
  // ...
});

ただし、子要素で mouseenter が発生するたびに mouseleave イベントが発生するため、mouseenter/mouseleave のすべての利点が無効になります。つまり、mouseover/mouseout のように機能します。

すべての要素にハンドラを直接アタッチせずにこれを処理する方法はありますか?

これは jQuery のバグのように見えますか? 私が知っていることと、読んだjQueryドキュメントから、上記のコードは正常に機能するように見えるためです。

遊ぶJSBin:http: //jsbin.com/axuluc/2/

編集:これは期待どおりに機能します: http://jsbin.com/axuluc/9/

4

2 に答える 2

1

子要素はすべての定義に含まれていますね。

可能であれば、目的の要素にクラスを与えるclass="mouse_active" か、適切なセレクターを使用してください。

それで...

$(window).on('mouseenter mouseleave','.mouse_active', function(e) {
  console.log(e.target, e.type);
  // ...
});

それでも単一のハンドラーをアタッチします

于 2013-03-14T12:20:13.780 に答える
0

これは正しい方法です:

$(window).hover(
   function(){
      // mouse enter function...
   },
   function(){
      // mouse leave function...
   }
);

http://api.jquery.com/hover/

于 2013-03-14T12:44:10.843 に答える