Jquery源码分析---Event分析
2010-09-14 13:36:25 来源:WEB开发网Jquery的fire事件的方法与prototype中实现是完全不一样的。Ext、YUI没有提供强迫触发事件的方法。对于一般的思维,程序来触发浏览器的事件就应该采用fireEvent或dispatchEvent方法来运行。
但是jquery采用一种不同的方法。对于通过jquery.event.add来注册的事件(不管是自定义的还是注册到浏览器事件),它保存在一个与元素及事件名相对应的cache中。在浏览器的触发中,这个是没有什么作用。但是它是为了通过等程序来强迫触发时,从cache中取到对应的事件处理函数。这个时候就抛开了浏览器的事件。在这里还可以执行一些自定义的事件函数。如⑤处。
对于通过html的标签中如click或elem.onclick=function(){}形式注册的事件函数。在⑥处它采用执行元素的如onclick形式的回调函数就可以。通过这种dom0的方式只能注册一个函数。
有的时候,如果没有onclick这样的事件处理函数,浏览器会执行默认的处理函数。如form.submit()。⑧处可以看出对于这样的默认的事件处理,还可以通过参数donative来控制。
程序手动强迫触发事件,有一点问题就是event是怎么生成,就是没有浏览器生成event传入到函数中。Prototype采用了是新生成的dataavailable的事件。这样的事件也没有什么作用。Jquery也采用fake的方式伪造一个一个事件,如④,它比prototype的事件好处在于它能通过trigger的函数的参数来传入需要的event。Prototype则不能。
通过上面的分析,隐隐可以看出Jquery是通过模拟浏览器的触发事件的执行过程来构建这个trigger的函数的。先执行dom1方式(addEvent)注册的事件,再执行dom0方式注册的事件,最后看看要不要执行默认的事件处理。
在⑦处,我们可以看出trigger还可能通过传入回调函数和参数来完成对执行的事件处理函数的结果进行判断处理,形成新结果通过trigger的函数返回。这在有的时候是很有用的。
更多精彩
赞助商链接