Поместите задержку JavaScript

Я думаю, что вы хотите, чтобы f.nettotal.value = "$" + showValue.toFixed(2);

65
задан Michael Gaskill 19 May 2016 в 03:04
поделиться

3 ответа

К сожалению, setTimeout () - единственный надежный способ (не единственный, но единственный надежный способ) чтобы приостановить выполнение скрипта без блокировки пользовательского интерфейса.

На самом деле это не так уж сложно, вместо того, чтобы писать это:

var x = 1;

// Place mysterious code that blocks the thread for 100 ms.

x = x * 3 + 2;
var y = x / 2;

вы используете setTimeout () , чтобы переписать его следующим образом:

var x = 1;
var y = null; // To keep under proper scope

setTimeout(function() {
    x = x * 3 + 2;
    y = x / 2;
}, 100);

Я понимаю, что использование setTimeout () требует больше размышлений, чем желательная функция sleep () , но, к сожалению, последней не существует. Существует множество обходных путей, чтобы попытаться реализовать такие функции. Некоторые используют циклы занятости:

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

другие используют XMLHttpRequest , связанный с серверным сценарием, который находится в спящем режиме на некоторое время перед возвратом результата .

К сожалению, это обходные пути, которые могут вызвать другие проблемы (например, зависание браузеров). Рекомендуется просто придерживаться рекомендуемого способа, которым является setTimeout () ).

125
ответ дан 24 November 2019 в 15:20
поделиться

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

3
ответ дан 24 November 2019 в 15:20
поделиться

В этой ветке есть хорошее обсуждение и полезное решение:

function pause( iMilliseconds )
{
    var sDialogScript = 'window.setTimeout( function () { window.close(); }, ' + iMilliseconds + ');';
    window.showModalDialog('javascript:document.writeln ("<script>' + sDialogScript + '<' + '/script>")');
}

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

2
ответ дан 24 November 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: