zoukankan      html  css  js  c++  java
  • JavaScript DOM在对象上注册事件监听器__John Resig的addEvent()方法解析

    http://blog.csdn.net/sykent/article/details/7879103

    /绑定事件
    function addEvent( obj, type, fn ) {
        if ( obj.attachEvent ) {
            obj['e'+type+fn] = fn;
            obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
            obj.attachEvent( 'on'+type, obj[type+fn] );
        } else
            obj.addEventListener( type, fn, false );
    }
    
    //移除事件
    function removeEvent( obj, type, fn ) {
        if ( obj.detachEvent ) {
            obj.detachEvent( 'on'+type, obj[type+fn] );
            obj[type+fn] = null;
        } else
            obj.removeEventListener( type, fn, false );
    }

    一,  obj['e' + type + fn] = fn的作用

          因为在IE中, 事件侦听器即事件处理函数内部的this默认指向window对象. W3C中指向所绑定的对象本身.

        因此为了使事件处理函数内部的this指向所绑定的对象,可以将函数赋值为该对象的某个属性成为他的方法,那么this指针就指向了所绑定的对象本身.

     

    二, 为什么不直接

         obj.attachEvent('on' + type, obj['e' + type + fn]);

           因为IE默认的事件对象为window.event,

        而W3C则是作为参数传入如function(W3CEvent) { //其中W3CEvent为事件对象 }.

        为了使得事件处理函数统一为function(theSameEvent) {} 同一传入事件对象. 那么IE则要把window.event传入

        即可以用函数包装. 也就有了function(){  obj['e' + type + fn](window.event); }

     

    三, 为什么不直接

         obj.attachEvent('on' + type, function(){

                obj['e' + type + fn](window.event); 

         });

         因为方便移除事件的考虑, obj[type + fn]可以获得对事件处理函数的引用.

  • 相关阅读:
    块结构在文件中的表示IOB【转载】
    LSTM输入层、隐含层及输出层参数理解【转载】
    L3-002 特殊堆栈 (30 分) 模拟stl
    L1-006 连续因子 (20 分) 模拟
    L2-014 列车调度 (25 分)
    L3-021 神坛 (30 分) 计算几何
    P1156 垃圾陷阱 DP
    P1063 能量项链 区间dp
    P1040 加分二叉树 区间dp
    P1605 迷宫 dfs回溯法
  • 原文地址:https://www.cnblogs.com/vico/p/2922696.html
Copyright © 2011-2022 走看看