2009-01-11 12 views
9

Je dois utiliser une invite personnalisée, comme celle affichée dans ce jQuery plugin demo. Le problème est que toutes les invites personnalisées dépendent d'un rappel, elles sont synchronisées, j'ai besoin qu'elles soient synchrones.Invite personnalisée JavaScript synchrone

que je dois faire quelque chose comme:

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

Où myPrompt est une invite synchrone sur commande modale.

Est-ce possible?

Merci, Naimi

Répondre

3

Vous pouvez utiliser l'interface utilisateur JQuery dialogue pour afficher un DIV comme une boîte de dialogue modale.

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

Cependant pour soutenir un dialogue synchrone truely (un appel de fonction de blocage) vous auriez besoin de l'aide du navigateur. Tous les navigateurs ne le supportent pas. IE a fait pendant de nombreuses années et mozilla a récemment ajouté showModalDialog à Firefox.

Avez-vous envisagé d'utiliser une fermeture pour continuer le rappel?

Exemple

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

Depuis displayPrompt ne peut pas bloquer realiable sur tous les navigateurs, les cadres utilisera callbacks à la place: -

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

bien sûr tout appel doSomethingWhichNeedsPrompt devrait également être au courant de son nature asynchrone et là pour doSomethingWhichNeedsPrompt peut avoir besoin de prendre le paramètre de fonction qu'il appelle après avoir fait tout son travail.

3

J'ai besoin qu'ils soient synchrones.

Vous devrez peut-être reconsidérer vos besoins. Avec IE7 + interdisant même window.prompt(), il n'y a pas de moyen multi-navigateur de recevoir une entrée synchrone.

Il y a showModalDialog, mais il n'est pas disponible dans le monde entier et c'est aussi, à mes yeux, plutôt hostile aux utilisateurs. Dans la plupart des navigateurs, être synchrone bloque non seulement vos scripts, mais aussi l'interface utilisateur du navigateur, ce qui peut être très gênant.

ne sont pas si Callbacks mauvaise OMI:

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