浅谈jQuery事件绑定原理

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

        //给函数一个唯一标识的索引  方便后面删除该事件   
        if ( !handler.guid )
            handler.guid = this.guid++;
        //获得该元素的events handle 下的数据   
        var events = data(elem, “events”) || data(elem, “events”, {}),
            handle =data(elem, “handle”) || data(elem, “handle”, function(){
                //gevent.handle才是各种行为触发后会执行的函数
                gevent.handle.apply(arguments.callee.elem, arguments);
            });
        handle.elem = elem;
        //遍历事件名 因为可以是 click mouseover
        each(types.split(/s+/), function(index, type) {
            var namespaces = type.split(“.”);
            //获得事件名
            type = namespaces.shift();
            //去掉点后面的东西 是个特殊的命名  在删除的时候可以指定删除他  如 click.d
            //用事件的type 记录住这个特殊的命名
            handler.type = namespaces.slice().sort().join(“.”);
            //获得该事件是否已经存在events 这个对象里面了
            var handlers = events[type];
            //如果不存在该事件 给元素绑定该事件               
            if (!handlers) {
                handlers = events[type] = {};
                if (elem.addEventListener)
                    elem.addEventListener(type, handle, false);
                else if (elem.attachEvent)