Javascript 我在向jquery脚本添加延迟时遇到问题

Javascript 我在向jquery脚本添加延迟时遇到问题,javascript,jquery,Javascript,Jquery,我正在使用一个巨型菜单脚本,我从。它工作得很好,除了看到我的页面上有一些这样的功能外,我希望有一个延迟,用户必须在菜单打开之前将鼠标放在链接上 我知道我需要一个setTimeout()标记和一个clearTimeout(),当用户将鼠标从链接上取下时使用。我就是不知道该把这个放在哪里。我试着只是猜测一下,但不管我把它放在哪里,它似乎要么破坏了功能,要么就无关紧要了 感谢您为我提供的任何帮助,非常感谢。基本思想是这样的 var timeout; $('#menuID').mouseenter(fu

我正在使用一个巨型菜单脚本,我从。它工作得很好,除了看到我的页面上有一些这样的功能外,我希望有一个延迟,用户必须在菜单打开之前将鼠标放在链接上

我知道我需要一个setTimeout()标记和一个clearTimeout(),当用户将鼠标从链接上取下时使用。我就是不知道该把这个放在哪里。我试着只是猜测一下,但不管我把它放在哪里,它似乎要么破坏了功能,要么就无关紧要了


感谢您为我提供的任何帮助,非常感谢。

基本思想是这样的

var timeout;
$('#menuID').mouseenter(function(){
  clearTimeout(timeout);
  $(this).children().show();
}).mouseleave(function(){
  timeout = setTimeout(function(){
    $(this).children().hide();
  },400);
});
请注意,制造商使用的方法与上述相同:

注意:在.js文件中,有两个变量可能需要微调:


使用此函数可以根据需要添加延迟

// Function declatation
var delay = (function()
{
    var timer = 0;
    return function(callback, ms)
    {
        clearTimeout(timer);
        timer = setTimeout(callback, ms);
    };
})();
用法:

delay(function()
{ 
    // Do thing you want delayed
}, 1000 ); 
1000
替换为要延迟的毫秒数


编辑

$("#menuitem").mouseenter(function()
{ 
    delay(function() 
    { 
        if($(this).is(':hover')) 
            // Show menu
    }, 1000 );     
});

你能发布你尝试过的代码吗?这会使帮助变得更容易。是的!发布您尝试过的内容…查看以下内容:
megamenu.$anchorobj.bind…
?它将显示代码绑定到mousenter事件,类似地,它隐藏在mouseleve上。后者已经有一个延迟计时器-使用相同的策略。@sej397我试着像这样添加它
megamenu.$anchorobj.bind(megamenu.revealtype==“click”?“click”:“mouseenter”,函数(e){setTimeout(function(){var menuinfo=jkmaemenu.megamenu[parseInt(this.getAttribute(“\u megamenupos”)])},2000)clearTimeout(menuinfo.hidetimer)//取消隐藏菜单计时器返回jkmagmenu.showmenu(e,parseInt(this.getAttribute(“\u megamenupos”))}
并且脚本不起作用,我非常喜欢您的delay()实现,但我认为这对OP没有帮助,因为他们仍然存在与setTimeout()相同的问题,因为他们不知道在哪里将其添加到现有代码中。我还认为,当用户将鼠标移出时,他们需要能够取消排队函数……将其用作
mouseover
函数,当延迟结束时,检查鼠标是否仍悬停在其上
$(“#menuitem”)。mouseenter(function(){delay(function(){if($(this).is(':hover')//做您想延迟的事情,1000); });看起来不如评论好,我会做一个编辑我这样添加它:
megamenu.bind(megamenu.revealtype==“click”?“click”:“mouseenter”,函数(e){delay(function(){if($(this).is(':hover'){var menuinfo=jkmaemenu.megamenu[parseInt(this.getAttribute('u megamenupos'))]clearTimeout(menuinfo.hidetimer)//取消隐藏菜单计时器返回jkmaemenu.showmenu(e,parseInt(this.getAttribute(“\u megamenupos”)))},1000);})
现在菜单根本不出现。
$("#menuitem").mouseenter(function()
{ 
    delay(function() 
    { 
        if($(this).is(':hover')) 
            // Show menu
    }, 1000 );     
});