首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

事件机制研讨

2012-10-24 
事件机制探讨? 由于浏览器事件机制的不兼容性,譬如最常见的注册事件差异,不常见的事件触发顺序差异,以及为

事件机制探讨

? 由于浏览器事件机制的不兼容性,譬如最常见的注册事件差异,不常见的事件触发顺序差异,以及为了支撑 component infrastructure,基本上常见的类库 YUI3,jquery,extjs 都包含了 event 模块用来注册 dom 事件和实现自定义事件的绑定与触发,理想情况下都希望自定义事件的表现同 dom 事件完全兼容,毕竟javascript不能完全的代替原生代码,虽然 yui3 已经很好的统一了自定义事件与dom事件间的鸿沟,但这是在改变了原生dom事件机制的基础上,这次从一个角度来说一下这个问题。


自定义事件监听器的返回值问题


在组件内部实现中,常常要根据调用者对某些事件的反应来进行一些操作(即AOP的概念),比如:

?

?

?

Extjs:


dom 事件:

Extjs dom 事件机制直接调用原生注册函数,每个用户的回调函数 a 被包装成另外一个函数 b 用以 normalize 事件,b 函数被浏览器原生的事件注册机制使用,故和原生事件机制表现一致,return false 只用来阻止浏览器的默认行为。

?

inner click -1inner click -2[a#inner javascri...aving');]inner custom -1inner custom -2[a#inner javascri...aving');]
?

示例查看(watch console)

?

?

?

总结:


return false 在原生dom事件机制中与框架自定义事件机制中存在不少的差异,原生 dom 事件为异步,触发顺序不定,而自定义事件为同步,javascript 自己实现,是否选择统一需要慎重考虑,我的建议则是采用yui3的事件机制来尽可能的统一自定义与dom事件,保持一致性,而return false 在dom事件中禁止使用,用event.preventDefault() 代替,减少使用者的疑惑。

?

热点排行