jQuery源码解析 事件

核心方法 delegate, live, bind

现在都转向使用on函数,live在1.9直接删除

最后都使用 jQuery.event.add( this, types, fn, data, selector ); this是原生的HTMLElement

重要的全局属性

jQuery.cache

jQuery.guid 

 

jQuery.cache中的存储

每一个jQuery中的元素添加的事件,都会在jQuery.cache 中存储为一个对象,id值对应为elem[jQuery.expando];

{1: events:Object, handle:function}

 

1 events 

获取$.data(el, "events");

处理函数都存储在这里,对不同的事件类型,有不同数组存储,描述的不好TODO

2 handle 处理函数

elem(prop) 存储的el元素

事件添加的处理函数

elemData.handle = eventHandle = function( e ) {
	// Discard the second event of a jQuery.event.trigger() and
	// when an event is called after a page has unloaded
	return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
		jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
		undefined;
};

底层

用addEventListener, attachEvent 添加的是 上面cache对象存储的handle处理函数

posted @ 2013-02-21 11:29  zzu-han  阅读(270)  评论(0编辑  收藏  举报