8
votes

Comment créer un programme d'attendre un bouton Appuyez sur JavaScript?

Je dois modifier un code JavaScript hérité. Il y a un endroit où je veux attendre que l'utilisateur appuie sur l'une des deux boutons, puis continuez avec le flux de programme (comme Invite () Fonction). Comment cela peut-il être atteint?


0 commentaires

6 Réponses :


0
votes
  • Vous pouvez masquer le contenu qui peut ne pas être visible (à l'aide de l'affichage CSS: aucun) et montrez-le lorsque vous appuyez sur une touche.
  • ou plus sécurisé: vous pouvez effectuer une demande de serveur / Ajax lorsqu'un bouton a été appuyé sur

0 commentaires

0
votes

Il n'y a pas de "sommeil" ou "attendre" l'opérateur en JavaScript. Vous pouvez définir une minuterie, cependant, et lorsque la minuterie expire, elle exécutera une fonction.

<script type="text/javascript">

document.onkeyup = KeyCheck;       
function KeyCheck()

{

   var KeyID = event.keyCode;


   switch(KeyID)

   {

      case 16:

      document.Form1.KeyName.value = "Shift";

      break; 

      case 17:

      document.Form1.KeyName.value = "Ctrl";

      break;

      case 18:

      document.Form1.KeyName.value = "Alt";

      break;

      case 19:

      document.Form1.KeyName.value = "Pause";

      break;

      case 37:

      document.Form1.KeyName.value = "Arrow Left";

      break;

      case 38:

      document.Form1.KeyName.value = "Arrow Up";

      break;

      case 39:

      document.Form1.KeyName.value = "Arrow Right";

      break;

      case 40:

      document.Form1.KeyName.value = "Arrow Down";

      break;
   }

}
</script>


2 commentaires

Malheureusement, cela ne fournit aucune sorte de «blocage». Je devra donc réorganiser le code dans des fonctions d'une manière ou d'une autre, je suppose.


JavaScript est un processus basé sur l'événement. Vous devez utiliser des événements et des fonctions. Voir les réponses ci-dessous par Hypnus.



4
votes

Vous devez casser votre fonction à ce stade et ajouter une autre fonction pour attraper le bouton de l'utilisateur. Appuyez sur l'événement.

Vous pouvez utiliser JavaScript narratif pour introduire le comportement de blocage et le simplifier (donc vous ne le faites pas Besoin de rompre votre fonction en deux parties), mais notez que cette bibliothèque a été abandonnée depuis 2013.


2 commentaires

Le lien est cassé :(


Modifié le lien vers le projet Sourceforge. Mais la bibliothèque est morte quand même :(



3
votes

OK, vous avez probablement souhaité ce genre de chose, vous pouvez implémenter les événements pour signaler la clé de la réponse de Pentium10:

Vous pouvez faire une fonction appelée exemple waitforit () dans laquelle vous définissez une fonction de sécurité () que Appelle la même méthode jusqu'à ce qu'une variable globale soit vraie (définie par vous appuyez sur la touche Action). P>

Par exemple: P>

<html>
<head>
 <script type="text/javascript">
var buttonpressed = false;

function waitForIt() {
  if (!buttonpressed ) {
  setTimeout(waitForIt,2500);
  } else {
 document.getElementById('info').value='ok';
  }
}

function startSomething() {
 document.getElementById('info').value='';
 waitForIt();
 document.getElementById('info').value='waiting'; 
}

function setButtonPressed() {
 buttonpressed = true;
}

</script>
</head>
<body>
<br>
<input type='text' style="width: 200px;" id="info" />
<br>
<input type='button' style="width: 200px;" value="Start" onclick="javascript: startSomething();">
<br>
<br>
<input type='button' style="width: 200px;" value="Continue" onclick="javascript: setButtonPressed();">
</body>

</html>


0 commentaires

0
votes

Je ne jouerais pas avec des délais d'attente et des intervalles pour cela.

Vous seriez mieux de couper le programme en 2 parties, peut être comme vous le suggérez dans 2 fonctions.
Exécutez la première partie, ajoutez le code pour demander l'action à l'utilisateur.

et ensuite basé sur l'action, exécutez la deuxième partie.


0 commentaires

7
votes

Créez simplement une promesse et stockez la fonction de résolution en dehors de sa portée dans une variable globale. Ensuite, laissez le programme attendre la promesse de résoudre (en utilisant «async» et «attendre»). La promesse est résolue sur un bouton Cliquez en appelant cette variable globale. J'ai utilisé cette technique dans un programme d'échecs pour attendre la réponse à une fenêtre de la pop up de promotion: xxx

Ainsi, après avoir créé la promesse, le programme attendra jusqu'à ce que la fenêtre contextuelle puisse la résoudre. La fenêtre contextuelle résout la promesse comme suit lorsqu'il est fermé: xxx

n.b. Veuillez garder à l'esprit que dans ce cas, la fonction PromotarL_piece () doit également être appelée avec le mot-clé "Attendre"! Sinon, le programme l'exécutera de manière asynchrone et continuera de toute façon


4 commentaires

Oui! Un exemple que je peux comprendre et qui travaille à intégrer avec les événements DOM existants ... Appelez simplement le «Global». Ce qui ne doit pas être global, juste dans la portée de l'appelant. Merci!


Je vous en prie. C'est en effet une solution très simple, à la fois conceptuellement et techniquement. Mais la variable qui détient la référence à la fonction de résolution doit également figurer dans la portée de l'assignateur (et non seulement l'appelant). Si vous pouvez réussir à le faire sans utiliser de global, je serais intéressé d'entendre comment. Je suppose que le traitement du bouton clique-t-il et la création de la promesse, qui oblige le programme à attendre, se déroulera dans différentes sections du programme.


Bien sûr, l'assignoire également. Dans mon cas, le gestionnaire d'événements a déjà fourni un rappel, alors je devais juste mettre le rappel et le fabricant de promesses et le gestionnaire de promesses dans le même bloc. Donc, pas la magie, mais pas universellement applicable.


Pour un peu plus d'explications, les autres exemples que j'ai trouvés tous ont enveloppé l'appel AddeventListener, que je ne pouvait pas faire dans ma situation. Mais cela, je pourrais faire.