Как приостановить функцию в javascript до тех пор, пока не будет выполнено условие, а не до установленного предела в миллисекундах! - PullRequest
0 голосов
/ 24 июня 2010

это срочно, и я не смог найти решение.Проблема заключается в следующем:

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

как я могуприостановить функцию от продолжения выполнения в javascript / jquery?

пример в псевдокоде:

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 за вашу помощь и терпение, я пробовал все виды методов без какого-либо результата.:)

Ответы [ 4 ]

3 голосов
/ 24 июня 2010

Разве вы не можете использовать диалог prompt для ввода данных пользователем?Он является модальным и будет приостанавливать выполнение в том месте, где он находится, если пользователь не отменит приглашение или не предоставит значение.И, пожалуйста, не называйте это безобразным.

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

См. пример здесь .Подождите некоторое время, прежде чем ввести значение или отменить, и обратите внимание на временные метки.

2 голосов
/ 24 июня 2010

Обычно это делается с помощью функций обратного вызова.Поскольку вы уже используете jQuery, вам может пригодиться что-то вроде плагина Impromptu .Это позволяет вам делать модальные приглашения с обратными вызовами.

Что-то вроде (частично на основе примера 9 из ссылки выше).Я разместил это как демо на 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]);   
    }
});
1 голос
/ 24 июня 2010

Короткий ответ: вы не можете «приостановить» выполнение Javascript.Вы можете сделать что-то подобное, если оно достаточно хорошо имитирует паузу для ваших целей, но это не одно и то же.

var answer;

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

answer = prompt("Please enter your name.");
0 голосов
/ 24 июня 2010

Если я вас правильно понимаю, я думаю, что вы должны запустить окно, используя window.showModalDialog () вместо window.open ().
Оно будет удерживать выполнение до закрытия диалога.

Альтернативный способ - использовать функцию обратного вызова.

...