jQuery - UI 对话框 - 寻找定时关闭的智能解决方案

标签 jquery jquery-ui dialog

我写了以下内容:

// Called with setTimeout(magicDialogDelayedClose, 2500);
function magicDialogDelayedClose() {
    $(".ui-dialog").fadeOut(function() {
        dialog_general.dialog('close');
    }); 
}

当我显示一个我想在 2.5 秒后自动关闭的通知对话框时,上面的代码会被 setTimeout 调用。

我注意到的问题是,如果使用手动关闭对话框,则该计时器仍在运行。如果用户随后打开一个新对话框(这很有可能),则计时器可以关闭该新对话框。

处理这个问题的明智方法是什么?j

最佳答案

粗略地说,在您的情况下,您不希望有一个全局适用的函数。您希望在每个对话框出现时将其关闭排队。从版本 1.4 开始,jQuery 已经实现了 delay函数就可以完成这个任务。它将一个空 Action 添加到动画队列中,以便后续的链接动画函数在队列中的延迟之后出现。

其实现方式如下:

function insertDialog() {
  // substitute your insertion code here
  var d = $('<div class="ui-dialog"></div>').appendTo($('#dialog_area'));

  // add a 2.5s delay into the animation queue, then add
  // a fadeOut with $(this).close() as a callback
  d.delay(2500).fadeOut(function(){ $(this).close() });
}

关于jQuery - UI 对话框 - 寻找定时关闭的智能解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4701742/

相关文章:

javascript - Jquery html 在最后插入

javascript - 基本的 JQuery .animate() 不起作用,但可以使用 .css() 更改相同的 CSS!

jsf - Primefaces 对话框渲染两次

javascript - 要求用户共享的JS对话框, "message"参数什么也没做?

javascript - 是否有一个 jQuery 库可以将图像以类似拼贴的格式放入 div?

scroll - 带有卡片和固定工具栏的 Vuetify 对话框

jquery - 尝试在 jquery 中查找使用 "this"传递的子图像元素

javascript - 使用 jquery 在 div 中加载页面

jquery - 创建动画网页的方法

javascript - 在框外单击鼠标时关闭 jQuery UI 对话框