坚持我,我正在处理预先存在的代码,并试图不必检修代码。

我正在处理一个过渡弹出菜单,该菜单需要500ms的延迟才能弹出。如此疯狂的CSS骇客:

#nav ul li ul {
  left: -9999999px;
}

#nav ul :hover ul {
  left: auto;
}

<div id="nav">
   <ul>
     <li>Link here</li>
     <ul>Some popup content</ul>
   </ul>
</div>


所以我取消了“ #nav ul:hover ul” CSS定义,并在jQuery中编写了一个基本的单行代码

$("#nav ul li").live("mouseover", function () {$(this).children("ul").css("left", "auto"); return false})


本质上,它模仿原始代码,但现在由JS控制

因此,从逻辑上讲,为了增加延迟,我开始弄乱setTimeout

$("#nav ul li").live("mouseover", function () {setTimeout(function() {$(this).children("ul").css("left", "auto");} return false}, 500))


另外,还有许多其他组合。通过setTimeout发送$(this)似乎很麻烦。我尝试研究.delay(),但它似乎仅对效果队列有用,而且我不确定如何将效果队列集成到其中以使一切看起来都很好。因此,任何帮助将不胜感激

最佳答案

看到这个jsfiddle。

http://jsfiddle.net/wHBK8/1/

我必须使用display:而不是jsfiddle的left方法,因为它不会应用left方法。

另外,您的内部ul不在css中指定的li内。

这是将鼠标悬停中所引用的方法传递给setTimeout的方法。

$("#nav ul li").live("mouseover", function () {
    var that= $(this);
    setTimeout(function() {that.children("ul").show();}, 5000);
    return false;
});

关于jquery - jQuery延迟是否无效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7475186/

10-14 17:50
查看更多