我想知道为什么setimout(fun(),time)在这里不起作用:
上下文:这显示一条消息并隐藏它,我想让它等待2秒,但如果我这样做它不会隐藏(通常我没有setimeout()
function mostrar_msj(msj){
$('#notificaciones').text(msj);
$('#notificaciones').animate({
top:$(window).scrollTop()+"px"
},
{
queue: false,
duration: 350
});
$("#notificaciones").slideDown(1000, setTimeout('cerrar()',2000));
}
function cerrar(){
$("#notificaciones").fadeOut(2000);
}
我只是困惑,这里:?
答案 0 :(得分:8)
当您使用jQuery时,更容易使用delay()
:
$("#notificaciones").slideDown(1000).delay(2000).fadeOut(2000);
动画功能会自动排队。
但要回答你的实际问题:
您没有正确设置回调。此
$("#notificaciones").slideDown(1000, setTimeout('cerrar()',2000));
会将setTimeout
的返回值设置为slideDown
的回调。适当的回调将是
$("#notificaciones").slideDown(1000, function() {
setTimeout('cerrar()',2000);
});
但这并不能解释为什么cerrar
未被调用,因为显然setTimout
被调用。这将我们带到第二点:
如果将字符串传递给setTimeout
,则会在全局范围内对其进行评估。如果您在ready
处理程序中有这段代码,则cerrar
在全局范围内不,因此JavaScript无法找到。
出于这个原因,不鼓励传递字符串。你应该传递一个函数引用:
setTimeout(cerrar, 2000);
答案 1 :(得分:2)
它不起作用,因为您不了解如何使用回调。这是正确的代码:
function mostrar_msj(msj) {
$('#notificaciones').text(msj);
$('#notificaciones').animate({
top: $(window).scrollTop() + "px"
}, {
queue: false,
duration: 350
});
$("#notificaciones").slideDown(1000, function() {
setTimeout(function() {
$("#notificaciones").fadeOut(2000);
}, 2000)
});
}
答案 2 :(得分:1)
试试这个:
$("#notificaciones").slideDown(1000, function() { setTimeout('cerrar()',2000) });
答案 3 :(得分:0)
当您应该引用该函数时,您正在引用函数调用:
...setTimeout(cerrar,2000)
答案 4 :(得分:0)
答案 5 :(得分:0)
如果您已经在使用jQuery,我强烈建议您不要使用setTimeout()。这是另一种你可以用更简洁的jQuery方式实现同一目标的方法:
function mostrar_msj(msj){
$('#notificaciones').text(msj);
$('#notificaciones').animate({top:$(window).scrollTop()+"px" },{queue: false, duration: 350});
$("#notificaciones").slideDown(1000).delay(2000).fadeOut(2000);
}
delay函数将超时的MS数作为参数,并在超时后继续执行排队/链接的jQuery操作。
答案 6 :(得分:0)
您应该可以使用delay
方法
function mostrar_msj(msj){
$('#notificaciones')
.text(msj)
.animate({top:$(window).scrollTop()+"px" },{queue: false, duration: 350})
.slideDown(1000)
.delay(2000)
.fadeOut(2000);
}