有关于多事件监听的执行顺序

森森 2009-11-10 72 views

      在编写JS中,有时候可能需要在某个对象中进行多个函数监听,但是,实际应用中,我发现IE中多事件监听时的执行顺序是反着执行的,但FireFox中确实按照监听顺序执行。

       写一段通用的给window.onload添加事件监听的代码:
/*
 * Just Test addEventLister For IE And FireFox
 */
addEvent = function(ename, func){
 if(typeof(window.addEventListener)!=’undefined’){
  window.addEventListener(ename, func, false);
 }else if(typeof(document.addEventListener)!=’undefined’){
  document.addEventListener(ename, func, false);
 }else if(typeof(window.attachEvent)!=’undefined’){
  window.attachEvent(‘on’ + ename, func);
 }else {
  var lodfunc = window.onload;
  if(typeof(oldfunc)==’function’){
   window.onload = func;
  }else {
   window.onload = function(){
    oldfunc();
    func();
   }
  }
 }
}

然后我们给window.onload添加多个事件:
addEvent(‘load’, function(){ alert(‘1′);});
addEvent(‘load’, function(){ alert(‘2′);});
addEvent(‘load’, function(){ alert(‘3′);});
addEvent(‘load’, function(){ alert(‘4′);});
addEvent(‘load’, function(){ alert(‘5′);});
addEvent(‘load’, function(){ alert(‘6′);});
addEvent(‘load’, function(){ alert(‘7′);});
addEvent(‘load’, function(){ alert(‘8′);});
addEvent(‘load’, function(){ alert(‘9′);});
addEvent(‘load’, function(){ alert(‘10′);});

IE6执行的情况是3、 5、 7、 9、 10、 8、 6、 4、 2、 1,感觉有些什么规律,3 5 7 9,10 8 6 4 2 。说不上来。
其他IE7以上的浏览器都是按照添加顺序的倒序执行的:10,9,8,7,6,5,4,3,2,1
Firefox,Chrome,Opera等非IE浏览器基本都是按照添加顺序执行的:1,2,3,4,5,6,7,8,9,10

不解,上网搜索,有人说IE里面执行是hash表随机的,不懂。

Tags: , / Posted in JS
欢迎订阅: Google Reader | 鲜果 | 抓虾 | 九点 | QQ邮箱 | 有道 | 更多

评论暂缺

  • (Required)
  • (Required, will not be published)

友情链接

Design By CKSKY TEAM VERSION 3.0 他说博客不用备案... © Copyright 2010 All Rights Reserved