just another event model

2011-06-09 04:47

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> 人发表留言,猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br><br><br>

ITeye推荐