Jquery 使用when和done以及settimeout显示隐藏div

Jquery 使用when和done以及settimeout显示隐藏div,jquery,settimeout,show-hide,Jquery,Settimeout,Show Hide,函数closecustomBox(){ $('#dialog').hide(); } $('#dialog').hide(); $(“#另一个对话框”).hide(); $(“#显示”)。单击(函数(){ $(“#对话框”).show(); 美元。什么时候( setTimeout(函数(){ closecustomBox(); }, 3000) ).完成(功能(x){ $(“#另一个对话框”).show(); }); }) #对话框{ 宽度:101px; 高度:101px; 背景色:红色; }

函数closecustomBox(){
$('#dialog').hide();
}
$('#dialog').hide();
$(“#另一个对话框”).hide();
$(“#显示”)。单击(函数(){
$(“#对话框”).show();
美元。什么时候(
setTimeout(函数(){
closecustomBox();
}, 3000)
).完成(功能(x){
$(“#另一个对话框”).show();
});
})
#对话框{
宽度:101px;
高度:101px;
背景色:红色;
}
#另一个对话{
宽度:100px;
高度:100px;
背景颜色:蓝色;
}


显示对代码的微小更改

函数closecustomBox(){
$('#dialog').hide();
}
$('#dialog').hide();
$(“#另一个对话框”).hide();
$(“#显示”)。单击(函数(){
$(“#对话框”).show();
//美元。什么时候(
setTimeout(函数(){
closecustomBox();
$(“#另一个对话框”).show();
}, 3000)
/*).完成(功能(x){
$(“#另一个对话框”).show();
});*/
})
#对话框{
宽度:101px;
高度:101px;
背景色:红色;
}
#另一个对话{
宽度:100px;
高度:100px;
背景颜色:蓝色;
}


如果要使用
$,请显示
。当
时,需要传入
$.Deferred()
作为参数。然后在超时完成后解析
$.Deferred()
,这将调用我们之前传递给
.done()
的方法

我还通过CSS将对话框的初始状态设置为
display:none
以避免最初需要通过JS隐藏它们

我还提供了一种替代方法,它不使用jQuery,从而获得相同的结果

函数closecustomBox(){
$('#dialog').hide();
}
变量对话框=$(“#对话框”);
var anotherDialog=$(“#anotherDialog”);
var超时;
$(“#显示”)。单击(函数(){
dialog.show();
另一个dialog.hide();
def=$.Deferred();
$.when(def).done(函数(){
closecustomBox();
另一个dialog.show();
});
if(timeout)cleartimout(timeout);//清除所有旧的超时以避免闪烁和奇怪的行为
timeout=setTimeout(函数(){
def.resolve();//解析将调用def.done回调的延迟
}, 3000);
})
//或者,如果您不想使用承诺,您可以将它们全部删除,并大大简化此示例
var超时2;
$(“#show-2”)。单击(函数(){
dialog.show();
另一个dialog.hide();
if(timeout)cleartimout(timeout);//清除所有旧的超时以避免闪烁和奇怪的行为
timeout=setTimeout(函数(){
closecustomBox();
另一个dialog.show();
}, 3000);
})
#另一个对话框{
宽度:100px;
高度:100px;
背景颜色:蓝色;
显示:无;
}
#对话{
宽度:101px;
高度:101px;
背景色:红色;
显示:无;
}

显示

交替显示
$。当
获取输入参数时,当这些参数解析时,它将执行
完成
功能。在您的情况下,
setTimeout
函数已成功执行,因此它会立即调用
done
方法,而无需等待高达
3sec
。要使其工作,您需要在此处使用
Promise
概念

函数closecustomBox(){
$('#dialog').hide();
}
$('#dialog').hide();
$(“#另一个对话框”).hide();
$(“#显示”)。单击(函数(){
$(“#对话框”).show();
var$def=$.Deferred();
美元。什么时候(
$def
).完成(功能(x){
$(“#另一个对话框”).show();
});
setTimeout(函数(){
closecustomBox();
$def.resolve(true);
}, 3000);
})
#对话框{
宽度:101px;
高度:101px;
背景色:红色;
}
#另一个对话{
宽度:100px;
高度:100px;
背景颜色:蓝色;
}


显示
问题“何时使用并完成”回答:注释何时使用并完成。。。嗯?虽然问题不同,但这里的答案应该是你想要的:可能是@freedomn-m的复制品我正在读它我看不出它是怎么复制的,如果我把这个问题的答案粘贴在这里,它将是这个问题的有效答案。我需要像这样的答案很高兴能提供帮助,我刚刚用一个简化的第二个示例更新了答案,它消除了延迟的需要:)。