setInterval / clearInterval下拉列表问题

时间:2010-10-28 09:08:54

标签: javascript jquery settimeout

我想使用jquery创建一个下拉菜单,但即使它不应该关闭。

我有一个订阅了mouseenter事件的元素,鼠标进入元素,下拉列表,启动,一切似乎都没问题。我转到列表元素的项目列表,其中包含一些内容。我第一次更改这两个元素时,一切都按预期工作。所以我留下了调用mouseout事件的元素,并且在1000毫秒内列表不再可见。 第二次我打开“下拉列表”似乎没问题,但是如果我查看列表,它会像我离开元素时那样消失。某种方式是合乎逻辑的,因为两个元素(按钮和列表)中的每一个都订阅了两个事件:mouseenter和mouseleave。 Mouseenter提供了一个clearInterval,mouseout提供了一个setInterval。数据存储在名为tTimer的变量中,该变量的默认值为0。 我真的不知道为什么会这样。这是我代码中的一个小贴士:

        var tTimer = 0;
        var rmItemList = function(){itemList.remove(); clearTimeout(tTimer); }

        $(this).bind("mouseleave",function(){ tTimer = window.setTimeout(rmItemList, 1000); });
        itemList.bind("mouseleave",function(){ tTimer = window.setTimeout(rmItemList, 1000); });
        $(this).bind("mouseenter",function(){ window.clearTimeout(tTimer); itemList.appendTo("body"); });
        itemList.bind("mouseenter",function(){ window.clearTimeout(tTimer); });

1 个答案:

答案 0 :(得分:1)

我发现想象你正在做什么有点棘手。但是,我看到您反复添加和删除DOM中的元素。我相信.remove()会从元素中删除事件处理程序。最好使用.show().hide()代替。

这将具有大大提高性能的额外优势。