建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

IE6下bug:focus与blur错乱的解决方案

时间:2011-08-01 08:52来源: 作者: 点击:
来介绍一下IE6的一个 bug:如以下代码,点击textarea时,引发window的blur,导致focus与blur配对混乱: <body> <textarea></textarea> hello <script> window.onblur=function(){     document.title= 'blur:' + Math.random() ; }

来介绍一下IE6的一个 bug:如以下代码,点击textarea时,引发window的blur,导致focus与blur配对混乱:

<body>
<textarea></textarea>
hello
<script>
window.onblur=function(){
    document.title= 'blur:' + Math.random() ;
}
window.onfocus=function(){
    document.title= 'focus:' + Math.random() ;
}
</script>
</body>

这应该是一个很常见的需求,例如,当前窗口定期更新数据,而窗口失焦则减少信息更新频率。IE6的bug导致的配对混乱却会打乱我们的计划。

上网查也没查出关于这个bug的官方说明与推荐解决方案,只好自己生更的实现一个解决方案。

代码如下:

<body>
<textarea></textarea>
hello
<script>
(function(){
    var focusTimer = 0;
    function myBlur(){
        document.title= 'blur:' + Math.random() ;
    }
    function myFocus(){
        clearTimeout(focusTimer);
        focusTimer = setTimeout(function(){
            document.title = 'focus:' + Math.random() ;
        },10);
    }
    window.onfocus = document.body.onfocusin = myFocus;
    window.onblur = document.body.onfocusout = myBlur;
}());
</script>
</body>

大略原理是:找到很多可能触发onfocus与onblur的时机,所有的onblur都立即执行,而onfocus则延时10毫秒懒惰执行。

结果是:虽说有时多执行了几次myFocus与myBlur,但能保证窗口状态的正确性。

方法可能有点山寨,不过一时没想到更好的办法,这样也暂时能解个燃眉之急。

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片