Javascript 使用setTimeout自动关闭jQuery UI对话框
我正试图让对话框在打开三秒钟后自动关闭。我尝试了以下方法:Javascript 使用setTimeout自动关闭jQuery UI对话框,javascript,jquery,jquery-ui,settimeout,Javascript,Jquery,Jquery Ui,Settimeout,我正试图让对话框在打开三秒钟后自动关闭。我尝试了以下方法: setTimeout($("#mydialog").dialog('close'), 3000); 以下是上下文: $("#acknowledged-dialog").dialog({ height: 140, modal: true }); setTimeout($("#acknowledged-dialog").dialog('close'), 3000); 但是用这种方法,它甚至不显示!我猜close方法在页
setTimeout($("#mydialog").dialog('close'), 3000);
以下是上下文:
$("#acknowledged-dialog").dialog({
height: 140,
modal: true
});
setTimeout($("#acknowledged-dialog").dialog('close'), 3000);
但是用这种方法,它甚至不显示!我猜close方法在页面上显示后会立即被调用。日志显示没有错误
我还尝试绑定到dialogopen事件:
$("#acknowledged-dialog").bind('dialogopen', function(event, ui) {
setTimeout($(this).dialog('close'), 3000);
});
$("#acknowledged-dialog").dialog({
height: 140,
modal: true
});
该对话框将显示,但不会自动关闭。这里的日志中也没有错误
我不能在$in setTimeout的参数中使用“this”吗?我专门为您遇到的问题编写了一个。请读一下
简言之,您希望将$(“#mydialog”).dialog('close')
包装成一个内联函数,在任何地方都可以作为延迟或触发事件的结果执行它
setTimeout(function(){
$("#mydialog").dialog('close')
}, 3000);
对话框甚至不显示,因为您在每次打开对话框时都会立即将其关闭。setTimeout在3秒后调用返回值$(“#mydialog”).dialog(“close”)。你想把整件事当作一根绳子扔掉,它应该可以正常工作。另外,我认为您不希望在初始化对话框之前绑定“dialogopen”。下面应该可以很好地工作:
$("#acknowledged-dialog").dialog({
height: 140,
modal: true,
open: function(event, ui){
setTimeout("$('#acknowledged-dialog').dialog('close')",3000);
}
});
不,除非你跟随@toby并包装函数,否则我发现我不能在上面的setTimeout代码中使用“this”。只是想注意,在字符串eval不起作用的情况下(比如我制作Chrome扩展时),您可以将字符串转换为匿名函数。请注意,如果用户在超时之前手动关闭对话框,则上述代码中的计时器将继续运行,并尝试第二次关闭对话框-除非对话框被销毁,否则这是正常的。但是如果在第一次超时之前第二次显示该对话框,第一个计时器将提前关闭该对话框。已修复,因为DefyGravity指出您不能在回调中引用
此
。对于将来的引用,您可以使用存储在变量中的此
。当您可能有一个不一定有id的动态对话框时,这很方便。只需在setTimeout
之前将This
存储在open
回调中,并像闭包一样使用变量。这也使得它更便于携带<代码>打开:函数(事件,ui){var$this=$(this);设置超时(函数(){$this.dialog('close')},3000);}