IE中的JQuery事件mouseenter mousemove行为 这是测试

IE中的JQuery事件mouseenter mousemove行为 这是测试,jquery,events,Jquery,Events,当鼠标进入firefox中的div时,chrome mouseenter事件比mouseenter事件先触发,如果IE mousemove事件比mouseenter事件先触发。这是你认识的臭虫吗?或者是否有其他方法可以让所有浏览器都以相同的方式运行[更新的答案] 有两种方法可以解决这个问题 1) 仅在mousenter事件上绑定mousemove事件,以便所有后续事件都能以相同的顺序正确触发。这涉及到大量的绑定和解除绑定 2) 存储变量,并仅在条件匹配时执行mousemove事件。更不用说以这种

当鼠标进入firefox中的div时,chrome mouseenter事件比mouseenter事件先触发,如果IE mousemove事件比mouseenter事件先触发。这是你认识的臭虫吗?或者是否有其他方法可以让所有浏览器都以相同的方式运行

[更新的答案]

有两种方法可以解决这个问题

1) 仅在
mousenter
事件上绑定
mousemove
事件,以便所有后续事件都能以相同的顺序正确触发。这涉及到大量的绑定和解除绑定

2) 存储变量,并仅在条件匹配时执行mousemove事件。更不用说以这种方式绑定/解除绑定(如果它是我的项目,我会这样做):

[原始答案]

mouseenter
是jQuery创建的一个特殊事件,这就是为什么它可能在
mousemove
之后触发。您可能需要的是
鼠标盖

$(document).ready(function(){
    var outer_mousemove = false;

    $("#outer").hover(function(){
       console.log('mouseenter');
       outer_mousemove = true;
    }, function(){
       console.log('mouseleave');
       outer_mousemove = false;
    }).mousemove(function(){
       if( outer_mousemove ){
         console.log('mousemove');
       }
    });
});
此外,为了防止从子元素接收多个鼠标悬停事件,您可以进行测试,以确保仅对对象生成的事件执行操作:

$(document).ready(function(){
  $('#outer').mouseover(function(){
    console.log("mouse over");
  }).mousemove(function(){
    console.log("mouse move");
  });
});

最后,在我的回答中,我使用了链接(即“mouseover().mousemove()”),而不是两次调用选择器
$(“#outer”)
。这只会使您的页面更快一些:)

很抱歉,但在您的情况下,在FF mouseover中,mouseover在mouseove之前触发,而在IE mouseove中,mouseover在mouseover之前触发@Rakesh Juyal,谢谢你的测试。我更新了我的答案来处理测试,以确保只有在初始
mouseenter
之后才能采取行动。
$(document).ready(function(){
    var outer_mousemove = function(){ console.log('mousemove') };

    $("#outer").hover(function(){
       console.log('mouseenter');
       // Attach the event listener only after
       // Mouse enter has fired
       $(this).mousemove( outer_mousemove );
    }, function(){
       $(this).unbind('mousemove', outer_mousemove );
    });
});
$(document).ready(function(){
    var outer_mousemove = false;

    $("#outer").hover(function(){
       console.log('mouseenter');
       outer_mousemove = true;
    }, function(){
       console.log('mouseleave');
       outer_mousemove = false;
    }).mousemove(function(){
       if( outer_mousemove ){
         console.log('mousemove');
       }
    });
});
$(document).ready(function(){
  $('#outer').mouseover(function(){
    console.log("mouse over");
  }).mousemove(function(){
    console.log("mouse move");
  });
});
$(document).ready(function(){
  $('#outer').mouseover(function(e){
    if(e.target == this){
      console.log("mouse over");
    }
  }).mousemove(function(){
    console.log("mouse move");
  });
});