clearTimeout的问题

时间:2011-10-10 17:27:00

标签: javascript jquery html

我正在尝试使用子导航下拉菜单构建一个简单的导航。所需的功能是,如果鼠标尚未输入,则下拉菜单会在一定的秒数后隐藏自身。虽然如果它目前正在盘旋,我想清除Timeout,以便在鼠标位于其中时它不会隐藏。

    function hideNav() {
        $('.subnav').hover(function(){
            clearTimeout(t);
        }, function() {
            $(this).hide();
        });
}

$('#nav li').mouseover(function() {
    t = setTimeout(function() { $('.active').hide()}, 4000);
    //var liTarget = $(this).attr('id');
    $('.active').hide();
    $('.subnav', this).show().addClass('active');
    navTimer;
    hideNav();
});

我错过了什么?我把手柄错了吗?

3 个答案:

答案 0 :(得分:0)

在设置新的超时之前,您还应该在鼠标悬停时清除超时 否则,之前启动的超时仍将处于活动状态,但不能再通过t变量访问。

答案 1 :(得分:0)

您可以将计时器变量设为全局。

function hideNav() {
  $('.subnav').hover(function(){
    clearTimeout(window.t);
  }
}

$('#nav li').mouseover(function() {
  window.t = setTimeout(function() { $('.active').hide()}, 4000);
});

答案 2 :(得分:-1)

尝试以推荐的方式(JS语句作为字符串):

t = setTimeout("$('.active').hide()", 4000);