2009-01-11 13 views
9

Devo utilizzare un prompt personalizzato, proprio come quello mostrato in questo jQuery plugin demo. Il problema è che tutti i prompt personalizzati dipendono da un callback, sono asincroni, ho bisogno che siano sincroni.Richiesta personalizzata sincrona JavaScript

ho bisogno di fare qualcosa di simile:

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

Dove myPrompt è un prompt sincrona personalizzato modale.

È possibile?

Grazie, Naimi

risposta

3

È possibile utilizzare JQuery UI Dialog per visualizzare un DIV come finestra di dialogo modale.

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

Tuttavia per sostenere un dialogo veramente sincrona (una funzione di chiamata di blocco) si avrebbe bisogno di un po 'di aiuto da parte del browser. Non tutti i browser lo supportano. IE ha fatto per molti anni e recentemente mozilla ha aggiunto showModalDialog a Firefox.

Avete considerato l'utilizzo di una chiusura per fornire la continuazione sulla richiamata?

Esempio

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

Dal momento che non può displayPrompt blocco attendibile su tutti i browser, quadri utilizzerà callback invece: -

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

Naturalmente nulla chiamando doSomethingWhichNeedsPrompt avrebbe anche bisogno di essere a conoscenza del suo natura asincrona e lì per doSomethingWhichNeedsPrompt potrebbe essere necessario prendere parametro di funzione che chiama dopo aver fatto tutto il suo lavoro.

3

ho bisogno che siano sincronizzati.

Potrebbe essere necessario riconsiderare le proprie esigenze. Con IE7 + che non consente nemmeno window.prompt(), non esiste alcun mezzo cross-browser per ricevere input sincrono.

C'è showModalDialog, ma non è globalmente disponibile ed è anche, ai miei occhi, piuttosto ostile all'utente. Nella maggior parte dei browser, i blocchi sincroni non sono solo gli script, ma anche l'interfaccia utente del browser, che può essere estremamente scomodo.

callback non sono così male IMO:

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