Wie eine Funktion in Javascript pausieren, bis eine Bedingung erfüllt ist, erst eine definierte Grenze in Millisekunden eingestellt ist!

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

Frage

Dies ist dringend notwendig, und ich konnte keine Lösung für sie finden. Das Problem ist wie folgt:

Ich bin der Gestaltung einer Web-App, die mehrere Befehle auf mehrere Maschinen sendet. Jetzt sind einige der Befehle i erfordern zusätzlichen Eingang haben. Ich habe ein Pop-up-Fenster in jquery konzipiert, dass Benutzer auffordern, diesen zusätzlichen Eingang hinzuzufügen. das Problem ist, während er durch alle Befehle nur ein Fenster für den zuletzt gewählten Befehl erscheint Looping ... das ist, weil es nicht pausiert, während Benutzereingaben eingegeben wird, bevor an einem anderen Befehl zur Eingabe gehen.

Wie kann ich eine Pause-Funktion aus fort seine Ausführung in Javascript / jquery?

ein Beispiel in Pseudo-Code:

loop each command
{
  for selected command popup windows;
  // pause until user finishes input then go to
  // next line where any function is processed

  function(); //then loop again--> pause --> when user finishes continue to function() etc..

}

thx für Ihre Hilfe und Geduld, habe ich versucht, alle möglichen Methoden ohne Ergebnis. :)

War es hilfreich?

Lösung

Wenn ich Sie richtig verstehe, ich glaube, Sie sollten das Fenster starten mit window.showModalDialog () anstelle von window.open ().
Es wird die Ausführung halten, bis das Dialogfeld geschlossen wird.

Eine alternative Möglichkeit ist es, die Callback-Funktion zu verwenden.

Andere Tipps

Können Sie nicht einen prompt Dialog verwenden, um Benutzereingaben zu bekommen? Es ist modal und wird Pause die Ausführung an dem Punkt, wo es platziert wird, wenn der Benutzer die Aufforderung annulliert oder liefert einen Wert. Und bitte nicht nennen es hässlich.

var userValue = prompt("Ask your question");

Siehe Beispiel hier . Warten Sie eine Weile, bevor Sie einen Wert eingeben oder Abbrechen, und beachten Sie die Zeitstempel.

Dies wird typischerweise unter Verwendung von Callback-Funktionen erfolgen. Da Sie bereits jQuery verwenden, könnten Sie so etwas wie die Impromptu Plugin hilfreich. Damit können Sie modale Eingabeaufforderungen mit Rückrufe tun.

So etwas wie (teilweise basierend auf Beispiel 9 von oben Link). Ich stellte dies als eine Demo unter http://jsfiddle.net/28d3C/2/ .

var ind = 0;
var values = [];

var count = 3;

function nextPrompt(done)
{
     function processPrompt(v, m, f)
     {
          if(v != undefined)
          {
            var input = f.alertName;
            values[ind] = input;
          }
          if(++ind < count)
          {
            nextPrompt(done);
          }
          else
          {
            done();
          }
    }

    var txt = 'Please enter value ' + ind + ':  <br /><input type="text" id="alertName" name="alertName" value="name here" />';    
    $.prompt(txt,{
            callback: processPrompt,
            buttons: { Hey: 'Hello', Bye: 'Good Bye' }
    });
}

nextPrompt(function()
{
    for(var i = 0; i < count; i++)
    {
      alert(values[i]);   
    }
});

Die kurze Antwort ist, dass man nicht ‚Pause‘ Javascript Ausführung. Sie können etwas tun, wenn sie eine Pause gut genug für Ihre Zwecke emuliert, aber es ist nicht dasselbe.

var answer;

var myInterval = setInterval(function () {
  if (answer != undefined) {
    clearInterval(myInterval);
    // processing code
  }
}, 1000);

answer = prompt("Please enter your name.");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top