我的代码如下:
HTML:
<a href="#">foo</a>
<div id="bar">bar</div>
jQuery的:
$('a').hover(function(){
console.log('hovered');
},function(){
if($('#bar').is(':hover')===false){
console.log('bar is not hovered');
}
});
但是在foo
的mouseleave上,我想检查bar
是否悬停。因此,从foo
鼠标移动到bar
,但它记录我的条形图没有悬停。
答案 0 :(得分:2)
这似乎是由Internet Explorer处理CSS和Javascript的顺序引起的。元素之间没有差距,所以这不是问题。您的代码可以在Chrome中正常运行。
这有点难看,但它支持我的结论,即Internet在CSS改变之前处理Javascript&amp;它确实提供了一种获得预期结果的方法。添加setTimeout(fn, 0)
可以通过暂停Javascript足以处理CSS来解决您的问题。
$('a').hover(function(){
console.log('hovered');
},function(){
setTimeout(function(){
if($('#bar').is(':hover')===false){
console.log('bar is not hovered');
}
}, 0);
});
这里是jsfiddle。
您可能还想阅读这个问题(Why is setTimeout(fn, 0) sometimes useful?),因为它有一些非常有用的信息可以解释发生了什么。
答案 1 :(得分:1)
函数嵌套将按照您的要求工作:
$(document).ready(function(){
$('a').hover(function(){
console.log('A link is hovered');
},function(){
console.log('A link is Not hovered');
$('#bar').hover(function(){
console.log('Div is hovered');
},function(){
console.log('Div is Not hovered');
});
});
});
答案 2 :(得分:-2)
确保元素之间没有间隙。例如,检查此CSS:
#bar{
float: left;
background: green;
}
a {
float: left;
background: red;
}
float
不会在元素之间产生任何差距。查看jsFiddle Demo。