google
dom2 addEventListener 顺序for 
http://wuduanpiao.bokee.com/6194006.html因为在DOM2中通过调用一个方法来给对象添加事件监听器,而不是通过设置HTML属性或者JavaScript属性的方法,所以,你可以给一个指定对象的一个特定事件注册多于一个的事件监听程序.如果你通过调用addEventListener( )函数为同一对象的同一事件注册多个监听程序,当那个对象上那个类型的事件发生的时候(或者是向上冒泡,或者是捕获的),所有的处理程序都被调用.重点理解一下:DOM标准并没有保证一个对象的所有监听函数被调用的顺序,因此,你不应该依赖于函数按照被注册的顺序被执行(事实上是根本不按顺序执行).还要注意的是,如果你多次注册相同的监听程序给同一个元素,只有第一次注册的有效,其余的被忽略. 

解决方案 »

  1.   


    2007-11-21
    王好奇 10:36:27
    addEventListener 执行的顺序不是按注册的顺序来的?
    梅雪香 10:37:12
    不是,据说是随机的
    梅花雪 10:37:28
    addEventListener 这种方式注册的函数不是按注册的顺序的,有点类似于HASH的乱序。
    月の影 10:53:16
    从标准来说Event的注册不是乱序而是并行
    只不过浏览器js是没法实现真正意义上的并行的
      

  2.   

    <script   type=text/javascript> 
    var   oDiv   =   document.getElementById("1"); var   fnClick1=   function(){ 
    alert("Click   One"); 
    oDiv.attachEvent("onclick",fnClick2); 
    } var   fnClick2   =   function(){ 
    alert("Click   Again"); 

    oDiv.attachEvent("onclick",   fnClick1); </script> 
      

  3.   

    <script   type=text/javascript> 
    var   fnClick1=   function(){ 
    alert("Click   One"); 
    } var   fnClick2   =   function(){ 
    alert("Click   Again"); 
    } var   oDiv   =   document.getElementById("1"); 
    oDiv.attachEvent("onclick",   fnClick1); 
    oDiv.attachEvent("onclick",fnClick2); 
    </script> 
    你的代码明显把onclick覆盖了
    所以只执行fnclick2
      

  4.   

    楼上的
    不是覆盖的原因
    是attachEvent地原因