ОК, пойдём длинным путём... Будем допиливать до обтекаемости уже готовый скрипт.
Имеем начинку .hta файла:
<html>
<head>
<title>Timer</title>
<hta:application />
</head>
<script type="text/javascript">
var h0=0;
var m0=0;
var s0=0;
var timeId=null;
function f2 (v) { return (v<10?'0'+v:v); }
function changetime() {
s0--;
if (s0<0) {
s0=59;
m0--;
if (m0<0) {
m0=59;
if (h0>0) h0--;
else { h0=m0=s0=0; }
}
}
}
function showtime () {
var t=h0*3600+m0*60+s0;
if (t>0) {
document.getElementById('clock1').innerHTML = f2(h0)+':'+f2(m0)+':'+f2(s0);
changetime();
window.setTimeout("showtime();",1000);
}
else if (t<1) {
document.getElementById('clock1').innerHTML = '';
window.clearTimeout (timeID);
}
}
function inittime (hour,min,sec) {
h0=Math.max(hour,0); m0=Math.max(min,0); s0=Math.max(sec,0);
timeID=window.setTimeout("showtime();",1000);
}
</script>
<body>
<span id="clock1"></span>
<br>
<script type="text/javascript">
function generate_list (name,min,step,max,deft) {
document.writeln ('<select name="'+name+'" size="1">');
for (var i=min; i<=max; i+=step) {
document.write ('<option value="'+i+'"');
if (i==deft) { document.write (' selected'); }
document.writeln ('>'+(i<10?'0'+i:i)+'</option>');
}
document.writeln ('</select>');
}
</script>
<form name="f1">
<script type="text/javascript">generate_list ('h0',0,1,50,1);</script> час
<script type="text/javascript">generate_list ('m0',0,1,59,0);</script> мин
<script type="text/javascript">generate_list ('s0',0,1,59,3);</script> сек
<input type="button" value="старт"
onclick="inittime(
document.f1.h0.options[document.f1.h0.selectedIndex].value,
document.f1.m0.options[document.f1.m0.selectedIndex].value,
document.f1.s0.options[document.f1.s0.selectedIndex].value);" />
</form>
</body>
</html>
Если запустить этот таймер и в процессе обратного отсчёта несколько раз нажать кнопку "старт", то секунды начинают "прыгать". Как это победить?