2010-07-31 40 views
1

我有一个弹出窗口,在jquery上执行mouseover。停止重复检测鼠标

在这一功能我使用弹出式窗口,前一秒钟延迟的setTimeout

问题是,如果在第二,他们鼠标在多次再多个弹出窗口被触发。

$('#div').mouseover(function() {setTimeout("popup()",1000);}); 

我需要做的是禁用检测,然后在popup()中重新启用它。

我该怎么做?

回答

1

我想是这样的

(function(){ 
    var popup_timer = 0; 
    $('#div').mouseover(function() { 
     clearTimeout(popup_timer); 
     popup_timer = setTimeout("popup()",1000); 
    }); 
}); 

编辑更新的代码,clearTimeout增加,包裹

+0

这似乎没有工作:s – Pablo 2010-07-31 16:09:26

+0

更新了代码 – Ties 2010-07-31 16:19:27

+0

我建议把整个东西包装在一个匿名函数中并在'popup_timer'上使用'var'。善待你的全球范围 – 2010-07-31 18:38:05

3

可以使用.hover()clearTimeout(),像这样:

$('#div').hover(function() { 
    $.data(this, 'timer', setTimeout(popup, 1000)); 
}, function() { 
    clearTimeout($.data(this, 'timer')); 
}); 

这将清除超时如果鼠标离开,您必须在元素上停留一整秒,以便弹出窗口触发。我们只使用元素上的$.data()来存储计时器ID(所以我们知道要清除什么)。另一个变化是不传递字符串到setTimeout(),而是直接引用该函数。