Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
向现有jQuery脚本添加setTimeout的语法有问题_Jquery_Settimeout - Fatal编程技术网

向现有jQuery脚本添加setTimeout的语法有问题

向现有jQuery脚本添加setTimeout的语法有问题,jquery,settimeout,Jquery,Settimeout,我想在下面的代码中添加一个setTimeout,以便在淡出效果执行之前有一个短暂的暂停 $(document).ready(function() { $('#menu li').hover( function() { $('ul', this).slideDown(50); }, function() { $('ul', this).fadeOut(100); }

我想在下面的代码中添加一个setTimeout,以便在淡出效果执行之前有一个短暂的暂停

$(document).ready(function() {  
    $('#menu li').hover(
        function() {
            $('ul', this).slideDown(50);
        }, 
        function() {
            $('ul', this).fadeOut(100);
        }
    );
});
这是我正在尝试的,但我猜语法一定是错误的:

$(document).ready(function() {  
    $('#menu li').hover(
        function() {
            $('ul', this).slideDown(50);
        },
        function() {
            setTimeout(function() {
                $('ul,' this).fadeOut(100);
            });
        }
    );
});

对不起,如果这是一个愚蠢的问题。我是jQuery的初学者。

在使用时,您还需要清除超时(如果您快速地将鼠标悬停在输入/输出位置),类似这样的方法可以工作:

$(function() {  
  $('#menu li').hover(function() {
    clearTimeout($.data(this, 'timer'));
    $('ul', this).slideDown(50);
  }, function() {
    $.data(this, 'timer', setTimeout($.proxy(function() {
      $('ul,' this).fadeOut(100);
    }, this), 400));
  });
});

这将使用存储/检索计时器ID,当前有400毫秒的延迟,只需相应调整。

此的含义在
设置超时()中有所不同。
。您需要在变量中引用所需的
this
,或者首先获取
ul
并引用该变量

var th = this;
setTimeout(function() {
    $('ul', th).fadeOut(100);
});


+1-很好地理解了这一点,
$.proxy()
也是维护上下文的另一种选择。@Nick-谢谢。为什么我总是忘记
$.proxy()
?!“这个”有对立面吗?有没有一种方法可以在你正在使用的ul滑下时淡出所有其他ul?@Tom-你可以使用
.not()
例如:
$(“#menu li”)。不是(这个)。找到('ul')
来获取所有其他子
元素。谢谢,尼克。我不得不添加一些类来区分ul和li的不同级别,但这对我来说很有效。再次感谢@汤姆-欢迎:)你也可以做
$(这个)。儿童('ul')
要降低一级而不是
$('ul',这个)
,如果这有帮助的话:)为了澄清,我必须添加识别类,以防止第二级ul过早消失。否则,我一从最高层里挖出来,它们就消失了$(this).children('ul')似乎不能解决这个问题,除非我做错了:$(document).ready(function(){$('menu li')).hover(function(){cleartimout($.data($.this,'timer'));$(this).children('ul')。slideDown(50);$('menu li')。not(this)。children('ul').hide()},function(){.data(this,'timer',setTimeout($.proxy(function(){$(this).children('ul').fadeOut(100);},this),500);});
var $ul = $('ul',this);
setTimeout(function() {
    $ul.fadeOut(100);
});