just another event model

事件模型也算是客户端兼容性的一个长期问题,早期 jquery 作者甚至因为这方面获过奖 ?一般来说 attachEvent 以及 addEventListener 已经基本够用,特别是 attachEvent 可以给回调传递事件参数 了,不用考虑怪异的 window.event

 

div.οnclick=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.通过钩子实现特殊事件,模拟事件的无缝接入。

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值