浅谈jQuery事件绑定原理

2020-05-22 17:11:35易采站长站整理

                    elem.attachEvent(“on” + type, handle);                                       
            }
            //吧函数放到元素的该事件的列表里面
            handlers[handler.guid] = handler;                                       
        });
        elem = null;                                                   
    }
}
 
gevent.hander是绑定事件真正执行的函数
在gevent.hander里面也有取.特殊命名的地方  但是不知道做什么用的
hander里面先对event进行包装
包装见gevent. fix 和 setEvent
主要是对做一个原生event的一个copy  然后把不兼容的方法  都合成兼容的写法
然后取元素的events (事件列表)
然后遍历这个事件列表  判断type是不是事件列表的key 是的话就执行事件
在执行列表函数的时候会判断返回值
如果返回false  还可以组织事件冒泡 和 默认行为


win.gevent = {
    handle : function(event){
        var all, handlers;
        //包装event
        event = arguments[0] = gevent.fix( event || window.event );
        event.currentTarget = this;
        //这里的……..
        var namespaces = event.type.split(“.”);
        event.type = namespaces.shift();
        all = !namespaces.length;
        var namespace = RegExp(“(^|.)” + namespaces.slice().sort().join(“.*.”) + “(.|$)”);
        //取这个元素的该行为 的 事件列表
        handlers = (data(this, “events”) || {} )[event.type];