Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS/jQuery-尝试使用mouseenter()mouseleave()实现打开和关闭显示div,这样就不会得到重复的动画_Javascript_Jquery_Jquery Animate_Mouseenter_Mouseleave - Fatal编程技术网

Javascript JS/jQuery-尝试使用mouseenter()mouseleave()实现打开和关闭显示div,这样就不会得到重复的动画

Javascript JS/jQuery-尝试使用mouseenter()mouseleave()实现打开和关闭显示div,这样就不会得到重复的动画,javascript,jquery,jquery-animate,mouseenter,mouseleave,Javascript,Jquery,Jquery Animate,Mouseenter,Mouseleave,这是我的代码: var timeouts = {}; $('#nav ul > li').mouseenter(function() { clearTimeout(timeouts['menu']); $(this).find('div.dropdown').stop(true).slideDown(200); }); $('#nav ul > li').mouseleave(function() { ti

这是我的代码:

   var timeouts = {};
    $('#nav ul > li').mouseenter(function() {
        clearTimeout(timeouts['menu']);
        $(this).find('div.dropdown').stop(true).slideDown(200);
    });
    $('#nav ul > li').mouseleave(function() {
        timeouts['menu'] = setTimeout(function() {
            $(this).find('div.dropdown').stop(true).slideUp(200);
        }, 1000)
    });
这似乎不起作用。有什么想法吗?
有没有其他方法可以实现我的目标?现在,当我将鼠标悬停在上方时,代码可以正常工作,但当我的鼠标离开时,div不会向上滑动。

在匿名函数中,
可能未定义为HTML元素

将此放在适当的范围内:

var timeouts = {'menu': false};

$('#nav ul > li').hover(function() {
    if (timeouts['menu'] !== false) {
      clearTimeout(timeouts['menu']);
    }

    $(this).find('div.dropdown').stop(true).slideDown(200);
}, function() {
    var $this = $(this);

    timeouts['menu'] = setTimeout(function() {
        $this.find('div.dropdown').stop(true).slideUp(200);
    }, 1000)
});

此外,如果您试图调用
timeouts['menu']
而没有首先定义它,则可能会出现错误。我会将它设置为默认值,然后在使用它之前检查它是否存在。

您可以尝试该插件,或者在此处查看一些解决方案:

您的列表是动态生成的吗?不,不是。如果我删除setTimeouts,代码可以正常工作。清除其中的代码,在mouseenter和mouseleave函数中发出一些警报,看看它是否工作