Discuz教程网

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

[复制链接]
authicon dly 发表于 2011-9-16 07:56:31 | 显示全部楼层 |阅读模式

  1. <body>
  2. <textarea></textarea>
  3. hello
  4. <script>
  5. window.onblur=function(){
  6. document.title= 'blur:' + Math.random() ;
  7. }
  8. window.onfocus=function(){
  9. document.title= 'focus:' + Math.random() ;
  10. }
  11. </script>
  12. </body>
复制代码

这应该是一个很常见的需求,例如,当前窗口定期更新数据,而窗口失焦则减少信息更新频率。IE6的bug导致的配对混乱却会打乱我们的计划。
上网查也没查出关于这个bug的官方说明与推荐解决方案,只好自己生更的实现一个解决方案。
代码如下:
  1. <body>
  2. <textarea></textarea>
  3. hello
  4. <script>
  5. (function(){
  6. var focusTimer = 0;
  7. function myBlur(){
  8. document.title= 'blur:' + Math.random() ;
  9. }
  10. function myFocus(){
  11. clearTimeout(focusTimer);
  12. focusTimer = setTimeout(function(){
  13. document.title = 'focus:' + Math.random() ;
  14. },10);
  15. }
  16. window.onfocus = document.body.onfocusin = myFocus;
  17. window.onblur = document.body.onfocusout = myBlur;
  18. }());
  19. </script>
  20. </body>
复制代码

大略原理是:找到很多可能触发onfocus与onblur的时机,所有的onblur都立即执行,而onfocus则延时10毫秒懒惰执行。
结果是:虽说有时多执行了几次myFocus与myBlur,但能保证窗口状态的正确性。
方法可能有点山寨,不过一时没想到更好的办法,这样也暂时能解个燃眉之急。



上一篇:js图片切换效果(映彩衣的js随笔)
下一篇:EXTJS记事本 当CompositeField遇上RowEditor
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 06:51

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表