just another event model
by
at 2011-06-08 20:47:20
original http://yiminghe.iteye.com/blog/1073547
事件模型也算是客户端兼容性的一个长期问题,早期 jquery 作者甚至因为这方面获过奖 ?一般来说 attachEvent 以及 addEventListener 已经基本够用,特别是 attachEvent 可以给回调传递事件参数 了,不用考虑怪异的 window.event
div.onclick=function(){ alert(window.event==window.event); // => false setTimeout(function(){ alert(window.event) // => null },0); }
可仍然不是完美的.
attachEvent 传入的参数似乎仅仅是 window.event 的指针:
document.getElementById("input1").attachEvent("onclick",function(e){ var e2=e; alert(e2==e); setTimeout(function(){ alert(e2==e); alert(e2.type); alert(e.type); },10); });
并且只在当前事件处理器同步处理内有效,一旦异步读取就会抛出 error
attachEvent :
1. 没有 event.currentTarget ,重用函数就不行了
2.回调中 this 无意义得指向 window .
3.多个回调绑定同一事件,触发顺序竟然是 random
4.标准事件缺失:hashchange
5.需要模拟一些有用的事件:valuechange
6.修正:其实这种方式不会导致循环引用而造成内容泄露,节点并没有属性指向绑定的事件函数。
addEventListener
1.标准控制下缺失了不少有用事件,需要事件模型来进行辅助模拟: focusin /out , mouseenter /leave
2. this 死板,只能是当前监听元素
JAEM
so 在巨人( jquery )的肩上,kissy 有了个不一样的事件模型 :
区分普通对象(继承 EventTarget)的自定义事件监听与触发以及 dom 节点的原生事件监听与触发.
1.每个元素每个对象对应一个系统事件回调,系统回调关联当前注册源解决 currentTarget 与 this,normalize 后调用用户事件回调
2.通过绑定时传入 scope 来实现用户事件回调定制 this
3.自身实现用户回调队列,保证用户回调触发顺序(先进先出)
4.通过钩子实现特殊事件,模拟事件的无缝接入。
<br><br>
<span style="color:red">
<a href="http://yiminghe.iteye.com/blog/1073547#comments" style="color:red">已有 <strong>2</strong> 人发表留言,猛击->><strong>这里</strong><<-参与讨论</a>
</span>
<br><br><br>
ITeye推荐