Jqueryui dialog(“close”) 结束当前的 JavaScript 线程

Jqueryui dialog("close") ends current javascript thread

本文关键字:JavaScript 线程 结束 dialog close Jqueryui      更新时间:2023-09-26

嗨,我在关闭 jquery 对话框时遇到问题。我有一个彗星连接,可以向我的浏览器发送消息。我想做的是,当我收到一条消息,我想做一些事情时,关闭对话框,然后再做一些事情。不幸的是,当我执行时:$('#dialog').dialog("close");它结束了我当前的JavaScript代码。有没有办法避免这种情况?还是我需要确保使用变量在最后运行收盘价?

例如,在这里您可以看到我的文本在之后不会更改:http://jsfiddle.net/hKhMC/

这是一个简单的演示,我的实际代码之后会进行大量计算,所以我想知道是否有一种解决方案不涉及在关闭前移动文本。

您正在递归触发对话框关闭事件。 在 Chrome 中,您的 jsfiddle 示例会导致Uncaught RangeError: Maximum call stack size exceeded。 这是因为 .dialog('close') 方法在关闭对话框后触发 dialogclose 事件。当有人单击对话框工具栏上的X按钮或按 ESC 键时,也会触发此事件。

但是,在对话框初始化期间绑定此事件,然后调用可以再次触发它的相同方法。

所以我找到了解决问题的方法。

下面是用于创建 JQueryUI 对话框的代码。

$('#currentCallDialog').dialog({
    autoOpen : false,
    height : 350,
    width : 550,
    modal : true,
    buttons : {
        "Open" : function() {
            //.. Do something
        }
    },
    close : function() {
        $(this).dialog("close");
    }
});

问题出在我尝试调用对话框("关闭")的关闭按钮中;删除后,一切正常,请参阅下面的代码以获取工作示例:

$('#currentCallDialog').dialog({
    autoOpen : false,
    height : 350,
    width : 550,
    modal : true,
    buttons : {
        "Open" : function() {
            //.. Do something
        }
    },
    close : function() {
        //.. Do something
    }
});