Comment mettre en pause une fonction javascript jusqu'à ce qu'une condition est remplie, pas jusqu'à ce qu'une limite définie en milliseconde est réglé!

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

Question

est urgent et je ne pouvais pas trouver une solution. Le problème est le suivant:

Je suis la conception d'une application web, qui envoie plusieurs commandes à plusieurs machines. Maintenant, certaines des commandes que j'ai besoin d'entrée supplémentaires. J'ai conçu une fenêtre pop-up dans jquery que demander à l'utilisateur d'ajouter cette entrée supplémentaire. le problème est en boucle à travers toutes les commandes seulement une fenêtre pour la dernière commande choisie apparaît ... c'est parce qu'il est pas tout utilisateur d'entrer en pause des entrées avant d'aller à l'entrée à une autre commande.

Comment puis-je mettre en pause une fonction de poursuivre son exécution en javascript / jquery?

un exemple 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 pour votre aide et de patience, j'ai essayé toutes sortes de méthodes sans aucun résultat. :)

Était-ce utile?

La solution

Si je vous comprends bien, je pense que vous devriez lancer la fenêtre à l'aide window.showModalDialog () au lieu de window.open ().
Il tiendra l'exécution jusqu'à ce que la boîte de dialogue est fermée.

Une autre manière consiste à utiliser la fonction de rappel.

Autres conseils

Ne pouvez-vous utiliser une boîte de dialogue de prompt pour obtenir l'entrée d'utilisateur? Il est modal et sera pause exécution au point où il est placé à moins que l'utilisateur annule l'invite, ou fournit une valeur. Et s'il vous plaît ne l'appelez pas laid.

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

Voir exemple . Attendez un certain temps avant d'entrer une valeur ou d'annuler, et notez les horodateurs.

Ceci est généralement fait à l'aide des fonctions de rappel. Puisque vous utilisez déjà jQuery, vous trouverez peut-être quelque chose comme le plugin Impromptu utile. Il vous permet de faire des invites modales avec callbacks.

Quelque chose comme (en partie basé sur l'exemple 9 de lien ci-dessus). Je posté une démo 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]);   
    }
});

La réponse courte est que vous ne pouvez pas « pause » exécution Javascript. Vous pouvez faire quelque chose comme ça si elle émule une pause assez bien à vos besoins, mais ce n'est pas la même chose.

var answer;

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

answer = prompt("Please enter your name.");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top