【问题标题】:Create JS execution blocking dialogs using jQuery使用 jQuery 创建 JS 执行阻止对话框
【发布时间】:2010-08-22 00:39:10
【问题描述】:

我有一个现有的 Web 应用程序,它使用 window.showmodaldialog() 显示某些表单并根据返回值执行其他一些 JavaScript

例如:

var retVal = window.showmodaldialog('...');

if (retVal==XXX)
  callXXX();
else
  callYYY();

showModalDialog()被执行时,它会阻塞主窗口上的JS执行,直到模式关闭。

我正在尝试用 jQuery 对话框替换这些模态窗口,但问题是一旦执行 $(...).dialog().open(),JavaScript 执行不会等待对话框关闭。

我知道有 jQuery API 允许我配置回调函数,但这对我来说涉及很多更改。无论如何我可以暂停 JavaScript 执行直到对话框关闭(我仍然必须能够从对话框执行脚本)。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    很遗憾,没有。您将需要使用某种回调函数。在 JavaScript 中这样的“阻塞”是个坏主意,因为只有一个执行线程,而 JavaScript 使用事件驱动模型。

    您可以这样做来“等待”返回值,但这根本不会“阻止”其他执行:

    var myReturn, 
    myInterval = setInterval(function () {
      if (myReturn != undefined) {
        clearInterval(myInterval);
        // Rest of processing code here.
      }
    }, 50);
    
    $('myContainer').dialog(close: function () {
      myReturn = 'Dialog Closed';
    }).open();
    

    应避免尝试“阻止”或“暂停”JavaScript 执行 - 该语言根本不是为它设计的。

    【讨论】:

    • +1 表示整个帖子。附带说明一下,在声明变量时,没有必要将变量的值设置为 undefined。 var myReturn,var myReturn = undefined, 相同。虽然它更冗长,但我们中的一些节省字节的人更喜欢较短的版本:-)
    【解决方案2】:

    恐怕没有办法“暂停”javascript 执行,直到您想要本机。showModalDialog 函数这样做是因为是由浏览器实现的。

    您可以手动执行“等待”机制,并且您需要进行更改(正如您所说,更改很多,但不应该是复杂的更改)。

    这些是我现在想到的事情:

    • 利用回调(对我来说,是迄今为止最好的)
    • 使用setTimeout 和您自己的机制,如g.d.d.c answered
    • 使用一些用户线程 javascript 库。

    但是,如果您对插件持开放态度,我刚刚找到了这个 jQuery 插件:BlockUIsome others,这可能会对您有所帮助。而且肯定还有其他一些插件已经实现了我在上面提到的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多