向现有jQuery脚本添加setTimeout的语法有问题
我想在下面的代码中添加一个setTimeout,以便在淡出效果执行之前有一个短暂的暂停向现有jQuery脚本添加setTimeout的语法有问题,jquery,settimeout,Jquery,Settimeout,我想在下面的代码中添加一个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() {
$('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);
});