jQuery UI对话框使用setTimeout自动关闭

dan*_*ins 7 javascript jquery jquery-ui settimeout

我打算在打开后三秒钟自动关闭对话框.我尝试了以下方法:

setTimeout($("#mydialog").dialog('close'), 3000);
Run Code Online (Sandbox Code Playgroud)

这是在上下文中:

$("#acknowledged-dialog").dialog({
    height: 140,
    modal: true
});

setTimeout($("#acknowledged-dialog").dialog('close'), 3000);
Run Code Online (Sandbox Code Playgroud)

但是用这种方法,它甚至都没有显示出来!我猜测close方法在页面显示后立即被调用.日志显示没有错误.

我也试过绑定到dialogopen事件:

$("#acknowledged-dialog").bind('dialogopen', function(event, ui) {
    setTimeout($(this).dialog('close'), 3000);
});
$("#acknowledged-dialog").dialog({
    height: 140,
    modal: true
});
Run Code Online (Sandbox Code Playgroud)

对话框显示,但不会自动关闭.这里的日志也没有错误.

我无法在setTimeout中的$参数中使用'this'吗?

Def*_*ity 18

setTimeout在3秒后调用$("#mydialog").对话框("关闭")的返回值.你想把整个东西扔成一个字符串,它应该工作得很好.另外,我不认为你想在初始化对话框之前绑定'dialogopen'.下面应该工作得很好:

$("#acknowledged-dialog").dialog({
    height: 140,
    modal: true,
    open: function(event, ui){
     setTimeout("$('#acknowledged-dialog').dialog('close')",3000);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 这是一个 jsFiddle 来处理这种类型的“自动关闭”功能分配。https://jsfiddle.net/cgjerdingen/20urmcg0/ (2认同)

air*_*tyh 8

我专门针对您遇到的问题撰写了一篇文章.请阅读.

简而言之,您希望在$("#mydialog").dialog('close')由于延迟或触发事件而希望执行的任何位置包装内联函数.

setTimeout(function(){
    $("#mydialog").dialog('close')
}, 3000);
Run Code Online (Sandbox Code Playgroud)

该对话框甚至没有显示,因为您在每种情况下打开它后立即关闭它.

  • 为了将来参考,您可以使用存储在变量中的`this`.当您可能具有不一定具有id的动态对话框时,这很方便.只需将`this`存储在`open`回调中的`setTimeout`之前,并使用变量就像一个闭包.这使它更便携.`open:function(event,ui){var $ this = $(this); setTimeout(function(){$ this.dialog('close')},3000); }` (2认同)