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);}