funzioni JavaScript eseguono senza attendere le funzioni nelle linee di cui sopra per tornare?

StackOverflow https://stackoverflow.com/questions/2026847

Domanda

Ho legato tasto una funzione a una forma di presentare. Voglio la funzione per far apparire una finestra di dialogo iframe e attendere interazione con l'utente, e quindi inviare il modulo (tramite una postazione Ajax).

Ma il comportamento che sto vedendo è che i POP di dialogo, ma la funzione continua di esecuzione e fa il palo ajax, anche se la chiamata finestra di dialogo non è ancora tornato. Ho bisogno di un modo di fermare l'esecuzione di codice fino a che restituisce finestra delle funzioni.

ho qualcosa di simile:

submitForm: function () {   

        <call a function that pops up a dialog, doesn't return until user interacts> 

        new Ajax.Updater('dialogContainer', url, {
                ...........
            }
        });      

        return false;
    }

Credo che questo sia il comportamento previsto di Javascript, ma non sono sicuro di come ottenere intorno ad esso ...

È stato utile?

Soluzione

javascript nel browser verrà eseguito in sequenza, quindi ovviamente la chiamata per aprire la finestra di dialogo iframe non attendere l'interazione con l'utente e restituisce immediatamente. La mia ipotesi è che qualunque biblioteca si sta utilizzando per il vostro popup finestra di dialogo avrà una sorta di funzione di callback che verrà eseguito in base all'azione dell'utente, invece. Quindi non vi resta che spostare il codice new Ajax.Updater(....); in una funzione di callback.

Altri suggerimenti

Sulla base di una conoscenza di base che ho di javascript Penso che questo sia il comportamento normale fino a quando la finestra di dialogo viene eseguito indipendentemente dal vostro codice (il codice del chiamava).

La vostra finestra di dialogo hanno alcun JavaScript in esecuzione in esso? Perché penso che, se ha, si può forse passare una funzione come parametro (callback che verrà eseguito il codice che si desidera) che verrà chiamato dalla finestra di dialogo quando ritorna.

Io direi che si dovrebbe chiamare la prima funzione anche attraverso ajax. e penso che si sta utilizzando prototipo.

Hai funzione di callback onComplete in Ajax.Request e Ajax.Updater oggetti. Poi nella funzione onComplete in grado di eseguire la seconda funzione.

come

onComplete: function () {  nuova Ajax.Updater ( 'dialogContainer', URL, {                 ...........             }         });  }

Se il client Web di destinazione è solo Internet Explorer, è possibile utilizzare window.showModalDialog. Ha la bella proprietà di bloccare il thread javascript nella finestra principale.

showModalDialog è stato implementato in Firefox, ma non so se la funzione sta bloccando in Firefox.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top