【问题标题】:JavaScript synchronous custom promptJavaScript 同步自定义提示
【发布时间】:2009-01-11 08:04:48
【问题描述】:

我需要使用自定义提示,就像jQuery plugin demo 中显示的那样。 问题是,所有自定义提示都依赖于回调,它们是异步的,我需要它们同步。

我需要做类似的事情:

alert("Your name is " + myPrompt("What's your name?"));

其中 myPrompt 是模态自定义同步提示。

有可能吗?

谢谢, 娜美

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您可以使用 JQuery UI Dialog 将 DIV 显示为模式对话框。

    http://docs.jquery.com/UI/Dialog/dialog#options

    但是,要支持真正同步的对话框(阻塞函数调用),您需要浏览器提供一些帮助。并非所有浏览器都支持它。 IE已经做了很多年,最近mozilla已经在Firefox中添加了showModalDialog。

    您是否考虑过使用闭包来提供回调的延续?

    例子

    function dosomethingwhichneedsprompt()
    {
       var a = "stuff";
       var o = {}
       //other code
       displayPrompt("PleaseInputStuff",o)  //o modified by prompt would like this to block
       //continue to use data on o and the variable a after prompt dismissed.
    }
    

    由于 displayPrompt 不能在所有浏览器上实现阻塞,框架将使用回调代替:-

    function doSomethingWhichNeedsPrompt(fnContinue)
    {
       var a = "stuff";
       var o = {}
       //other code
       displayPrompt("PleaseInputStuff",o, fnCallback)
       function fnCallback() {
           //continue to use data on o and the variable a after prompt dismissed.
           if (fnContinue) fnContinue();
      }
    }
    

    当然,任何调用doSomethingWhichNeedsPrompt 的东西也需要注意它的异步性质,doSomethingWhichNeedsPrompt 可能需要在完成所有工作后获取它调用的函数参数。

    【讨论】:

      【解决方案2】:

      我需要它们同步。

      您可能需要重新考虑您的需求。由于 IE7+ 甚至不允许 window.prompt(),因此没有跨浏览器接收同步输入的方法。

      有 showModalDialog,但它不是全球可用的,而且在我看来,它对用户非常不利。在大多数浏览器中,同步不仅会阻止您的脚本,还会阻止浏览器的 UI,这可能非常不方便。

      回调并没有那么糟糕 IMO:

      myPrompt("What's your name?", function(x) {
          alert("Your name is "+x);
      });
      

      【讨论】:

        猜你喜欢
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 2020-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多