JavaScript同步自定义提示

时间:2009-01-11 08:04:48

标签: javascript jquery

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

我需要做类似的事情:

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

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

有可能吗?

谢谢, 纳伊米

2 个答案:

答案 0 :(得分:3)

您可以使用JQuery UI对话框将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可能需要获取它在完成所有工作后调用的函数参数。

答案 1 :(得分:3)

  

我需要他们同步。

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

有showModalDialog,但它不是全局可用的,而且对我来说,它也是非常用户敌对的。在大多数浏览器中,同步块不仅是您的脚本,还有浏览器的UI,这可能非常不方便。

回调并不是那么糟糕IMO:

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