Как я могу заставить программу ждать нажатия кнопки в JavaScript? - PullRequest
2 голосов
/ 08 февраля 2010

Мне нужно изменить какой-то устаревший код JavaScript. Есть место, где я хочу подождать, пока пользователь нажмет одну из двух кнопок, а затем продолжить выполнение программы (например, функция prompt()). Как этого достичь?

Ответы [ 5 ]

3 голосов
/ 08 февраля 2010

Хорошо, возможно, вы хотели такого рода вещи, вы можете реализовать события, чтобы пометить ключ из ответа Pentium10:

Вы можете создать функцию, вызываемую, например, waitForIt (), в которой вы устанавливаете функцию setTimeout (), которая вызывает тот же метод до тех пор, пока глобальная переменная не станет истиной (устанавливается нажатием кнопки).

Например:

<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>

Вы можете напрямую вызвать метод waitForIt (), но я сделал это, чтобы вы могли видеть, что происходит. Извините за беспорядок в примере, но у меня нет много свободного времени:)

3 голосов
/ 08 февраля 2010

Вам нужно прервать свою функцию в этой точке и добавить другую функцию, чтобы перехватить событие нажатия кнопки пользователя.

Вы можете использовать Narrative Javascript , чтобы представить поведение блокировки и упростить его (чтобы вам не нужно было разбивать вашу функцию на две части), но обратите внимание, что эта библиотека была заброшена с 2013 года.

0 голосов
/ 08 февраля 2010

Я бы не стал играть с таймаутами и интервалами для этого.

Вам лучше разрезать программу на 2 части, может быть, как вы предлагаете в 2 функциях.
Запустите первую часть, добавьте код, чтобы попросить пользователя о действии.

А затем, основываясь на действии, запустите вторую часть.

0 голосов
/ 08 февраля 2010

В JavaScript нет оператора «сна» или «ожидания». Вы можете установить таймер, и, когда он истечет, он выполнит функцию.

setTimeout("alert('hello')",1250);

Вы должны использовать события для пометки ключа:

<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>
0 голосов
/ 08 февраля 2010
  • Вы можете скрыть содержимое, которое может быть невидимым (с помощью отображения CSS: нет), и отобразить его при нажатии кнопки.
  • Или более безопасно: вы можете сделать запрос к серверу / AJAX, когда нажата кнопка
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...