一段时间后观察mouseenter事件

时间:2016-11-07 12:13:38

标签: javascript jquery magento drop-down-menu

我有一个jquery代码,用于在网站的菜单栏中观察mouseenter事件。

menubar.on('mouseenter', 'li.parent.level0', function() {
       ... function body
});

现在我想提供一个延迟,使事件函数体在2000 ms之后执行,如下所示:

menubar.on('mouseenter', 'li.parent.level0', function() {
    delay(2000);
    ... function body
});

我尝试了以下内容:

menubar.on('mouseenter', 'li.parent.level0', function() {
        delay(2000);
        ... function body
    });

var delay = (function(){
  var timer = 0;
  return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
  };
})();

但它仍然没有考虑延迟,只是在mouseenter上立即执行菜单代码。

怎么做?

2 个答案:

答案 0 :(得分:0)

您似乎正在寻找的是常规setTimeout,这将延迟您放入其中的任何代码的执行。

menubar.on('mouseenter', 'li.parent.level0', function() {
    setTimeout(function() {
        // ... function body
    },2000);
});

答案 1 :(得分:0)

只需使用orders = Order.objects.filter(guest=guest).all()

setTimeout

如果他们在触发之前离开元素,您可能想要取消它:

menubar.on('mouseenter', 'li.parent.level0', function() {
    setTimeout(function() {
        // Do the work here
    }, 2000);
});

请注意,var menubarMouseEnterTimerHandle = 0; menubar .on('mouseenter', 'li.parent.level0', function() { clearTimeout(menubarMouseEnterTimerHandle); // Just in case, but we shouldn't get repeated mouseenters... menubarMouseEnterTimerHandle = setTimeout(function() { // Do the work here }, 2000); }) .on('mouseleave', 'li.parent.level0', function() { clearTimeout(menubarMouseEnterTimerHandle); menubarMouseEnterTimerHandle = 0; }); 是一个无效的计时器句柄,如果句柄为0clearTimeout将忽略对它的调用,因此我们不需要保护上面0