2009-01-11 19 views
9

Ich brauche eine benutzerdefinierte Eingabeaufforderung, genau wie die in diesem jQuery plugin demo gezeigt. Das Problem ist, alle benutzerdefinierten Aufforderungen sind abhängig von einem Rückruf, sie sind asynchron, ich brauche sie synchron zu sein.JavaScript synchrone benutzerdefinierte Eingabeaufforderung

Ich brauche so etwas zu tun:

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

Wo myPrompt eine modale individuelle synchrone Aufforderung ist.

Ist es möglich?

Danke, Naimi

Antwort

3

Sie JQuery UI-Dialog können Sie eine DIV als modaler Dialog angezeigt werden soll.

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

jedoch einen wirklich synchronen Dialog (ein blockierende Funktionsaufruf) zu unterstützen, würden Sie etwas Hilfe aus dem Browser. Nicht alle Browser unterstützen es. IE hat seit vielen Jahren getan und vor kurzem mozilla haben ShowModalDialog zu Firefox hinzugefügt.

Haben Sie überlegt, eine Schließung zu verwenden, um eine Fortsetzung beim Rückruf zu gewährleisten?

Beispiel

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. 
} 

Da displayPrompt auf allen Browsern nicht realiable Block kann, wird Frameworks Rückrufe verwenden, anstatt: -

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(); 
    } 
} 

nichts Natürlich ruft doSomethingWhichNeedsPrompt auch ihrer bewusst sein müssten async Natur und dort für doSomethingWhichNeedsPrompt müssen möglicherweise Funktion Parameter, die es nach seiner getan alle seine Arbeit aufgerufen.

3

ich brauche sie synchron zu sein.

Sie müssen möglicherweise Ihre Bedürfnisse überdenken. Mit IE7 +, das sogar window.prompt() verbietet, gibt es keine browserübergreifenden Mittel zum Empfangen einer synchronen Eingabe.

Es gibt showModalDialog, aber es ist nicht global verfügbar und es ist auch für meine Augen ziemlich benutzerfeindlich. In den meisten Browsern sind synchrone Blöcke nicht nur Ihre Skripte, sondern auch die Benutzeroberfläche des Browsers, was sehr unpraktisch sein kann.

Rückrufe sind nicht so schlecht IMO:

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