onfocus / onblur进展

时间:2011-06-18 22:31:37

标签: javascript timer countdown onblur onfocus

您好我是javascript的新手,今天在此努力工作,无法找到解决方案。 请帮帮我。

<script>
    if (/*@cc_on!@*/false) {
        document.onfocusin = startB;
        document.onfocusout = stopB;
    } else {
        window.onfocus = startB;
        window.onblur = stopB;
    }

var x = 1000;
var y = 1;

function startB() {
    if (x !== 'ok') {
        x = x - y;
        document.form.num.value = x;
        timeoutID=setTimeout("startB()", 1000);
    } 
    if (x == 0) {
        x = 'ok';
        document.form.num.value = x;
    }
}

function stopB() {
clearTimeout(timeoutID);
}
</script>
<body onLoad="startB()">
<form name="form">
<input name="num" size="10" readonly="readonly" type="text"> 
</form>

当我打开这个页面时,它会以1 /秒的值正常倒计时,当我更改窗口/标签时它停止,我再次回来它继续1 /秒,这是我想要的,但我有一个大问题 - - &GT;当我转到此链接并非常快速地更改窗口/标签时,它仍然被卸载,它开始在onblur状态下倒计时,当我回到onfocus状态时,该功能被读取两次并开始倒计时1 / 0.5秒。 ..双倍。

任何人都可以帮我吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

在设置超时之前,让 startB 调用 stopB 。将 stopB 更改为:

  if (timeoutID) clearTimeout(timeoutID);

因此,如果timeoutID已被清除(或尚未设置),则不会抛出错误。

修改

如果您在加载事件发生之前离开页面,那么计时器将启动而页面无法获得焦点。如果在设置之前取消超时(即startB 始终在调用setTimeout之前调用stopB),则不能运行两个定时器。