$('#interviehover').hover(function(){
IntervalId = setInterval(sec, 500)
alert(IntervalId)
});
$('#interviehover').mouseout(function(){
clearInterval(IntervalId)
alert(IntervalId )
});
在mouseout事件触发后,我获得IntervalId并添加1;例如,在悬停时它会警告12059,但在鼠标输出12060上?
谢谢!
答案 0 :(得分:2)
问题是你使用'悬停'而不是'鼠标悬停'。 鼠标悬停和鼠标移动似乎都会触发悬停:
$('#interviehover').mouseover(function() {
IntervalId = setInterval(sec, 500);
alert("hover:"+IntervalId);
});
$('#interviehover').mouseout(function() {
clearInterval(IntervalId);
alert("mouseout:"+IntervalId);
});
悬停的签名有2个函数,一个用于mouseenter,一个用于mouseleave:
.hover( handlerIn(eventObject), handlerOut(eventObject) )
答案 1 :(得分:1)
在您的示例中setInterval
可能被多次调用,因此IntervalId
的值将被覆盖。
请勿将alert
与hover
/ mouseout
结合使用,尤其是在调试时。出现的警报窗口将导致意外触发这些事件。
不要使用可以覆盖的全局变量,或者可以多次执行setInterval
,并且只能清除最后一个。
hover()
有两个参数,一个用于mouseover
事件,一个用于mouseout
事件。要么不使用hover()
并设置mouseover
和mouseout
,要么不使用mouseout
并使用hover
的两个参数。
答案 2 :(得分:0)
您看到错误,因为当您只传递一个函数时,您的悬停功能会运行两次。
您可以将其更改为两个参数,然后它将停止您所看到的内容:
var IntervalId;
$('#interviehover').hover(function() {
IntervalId = setInterval(sec, 500)
$('#result').append('Starting with ID: '+ IntervalId +'<br/>');
}, function() {
clearInterval(IntervalId)
$('#result').append('Cleared ID: '+ IntervalId +'<br/>');
});
function sec() {
$('#result').append('Running with ID: '+ IntervalId +'<br/>');
}
看看上面的working here
答案 3 :(得分:0)
正如您在查看jquery悬停方法时所看到的那样:
hover: function( fnOver, fnOut ) {
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
}
如果只提供了1个功能,它会将它用于进入和离开。 进入时,它会设置一个计时器。然后当你离开时,它再次设置一个新的计时器。 第二个计时器ID可能是第一次+ 1 虽然它被指定为“独特”,但很有可能它被实现为增量(因为它也是唯一的)