Я думаю, что вы хотите, чтобы f.nettotal.value = "$" + showValue.toFixed(2);
К сожалению, 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;
}
}
}
К сожалению, это обходные пути, которые могут вызвать другие проблемы (например, зависание браузеров). Рекомендуется просто придерживаться рекомендуемого способа, которым является setTimeout ()
).
На самом деле только setTimeout
подходит для этого задания, и обычно вы не можете установить точные задержки с неопределенными методами как циклы занятости.
В этой ветке есть хорошее обсуждение и полезное решение:
function pause( iMilliseconds )
{
var sDialogScript = 'window.setTimeout( function () { window.close(); }, ' + iMilliseconds + ');';
window.showModalDialog('javascript:document.writeln ("<script>' + sDialogScript + '<' + '/script>")');
}
К сожалению, похоже, что это не работает в некоторых версиях IE, но в ветке есть много других достойных предложений если это окажется для вас проблемой.