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é!
-
29-09-2019 - |
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. :)
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.");