function f2(){
var oDiv = document.getElementById("d");
oDiv.attachEvent("onclick",fn);
oDiv.attachEvent("onclick",fn2);
}以上代码跑了一下,先执行fn2,在执行fn.但是书上说的是先fn再fn2...
求解释..我看的书是<JavaScript高级程序设计> 人民邮电出版 Zakas 著 第231页

解决方案 »

  1.   

    事件的执行,跟它的绑定还有 是否捕获有关系。
    一般来说遵循先进先出的概念,Chrome,Firefox 都遵循这个规则。但IE中是没有顺序可言的。
    <script>
        function a() {
            alert("a");
        }
        function b() {
            alert("b");
        }
        function c() {
            alert("c");
        }
        function d() {
            alert("d");
        }
        function e() {
            alert("e");
        }
        function addEvent(obj, type, fn) {
            if (obj.addEventListener) {
                obj.addEventListener(type, fn, false);
                return true;
            } else if (obj.attachEvent) {
                return obj.attachEvent("on" + type, fn);
            } else {
                return false;
            }
        }
        addEvent(window, 'load', a);
        addEvent(window, 'load', b);
        addEvent(window, 'load', c);
        addEvent(window, 'load', d);
        addEvent(window, 'load', e);
    </script>
      

  2.   

    function f3(){
    var oDiv = document.getElementById("d");
    oDiv.onclick = fn;
    oDiv.attachEvent("onclick",fn2);
    }以上代码跑了下,顺序为先fn,在fn2...3L给个说法
      

  3.   

    IE里没有固定的顺序可言,没什么规律
    也没必要找它的规律
    如果非要在IE里控制其执行顺序,那么用回调解决吧
      

  4.   

    FF,CHROME下,确实是从上到下的,IE里也确实是从下到上的。这个是IE不符合标准,可以自己写绑定时间方法替代IE的attachEvent
      

  5.   

     If you attach multiple functions to the same event on the same object, the functions are called in random order, immediately after the object's event handler is called.