jquery:使用其id的锚动态的名称超时

时间:2013-10-01 09:06:41

标签: javascript jquery hover timeout settimeout

HeJ小鼠!

我可能是这里的傻瓜,但我无法弄清楚这一点;

我正在使用javascript中的基本hover()函数构建一个水平菜单。当您离开锚点时,在悬停效果消失之前会有一个短暂的时间。

所以我要做的是:在锚点的ID之后命名Timeout,在其中触发mouseleave以便在mouseenter上再次停止正确的Timeout。

在Mouseenter上我通过获取id来检查哪个锚被悬停,我取消了这个id的超时,我将hvr-Class添加到悬停的锚点:

var t = $(this).attr('id');
clearTimeout(t);
$(this).addClass('hvr');

在Mouseleave上我基本上想做这个:

$(this).attr('id') = setTimeout('doSoemthing()',66);

但是这会导致错误,因为=的左侧不允许表达式。我想到了这样的事情:

var ts = $(this).attr('id');
ts = setTimeout('doSoemthing()',66);

但这也不起作用,因为它只会覆盖变量t。相反,我想要为Timeout-Name“打印”变量的值。如果我使用固定的超时名称,一切都像魅力,但每个链接只有一个(相同)超时,但没有。

有办法做到这一点吗?还是我不在赛道上?

这是完整的功能:

$("nav a").hover(

  function(){

  // On MouseEnter
    var t = $(this).attr('id');
    clearTimeout(t);
    $(this).addClass('hvr');

  },function(){

  // On MouseLeave
    $(this).attr('id') = setTimeout(function(){doSomethingHere},66);

  }

);

提前致谢,最诚挚的问候。

1 个答案:

答案 0 :(得分:0)

根据我的理解,您需要根据悬停元素保留对超时事件的引用,您可以使用.data()来执行此操作

我认为你在寻找的是

$("nav a").hover(function () {
    clearTimeout($(this).data('mltimer'));
    $(this).addClass('hvr');
}, function () {
    var timer = setTimeout('doSoemthing()', 66);
    $(this).data('mltimer', timer)
});