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