[转]firefox和ie中enter事件、event模型、事件源
e = event?event :(window.event?window :event:null);
e = e || window.event;
为什么要如此写,这与浏览器的事件处理模型有关,虽然ie事件模型提供了Event对象的详细情况,但它不把event对象作为参数传递给处理程序,而通过全局window对象的event属性访问event对象。这意味着ie中的事件处理程序可以用window.event或只用event引用event对象。虽然在用函数参数的地方使用全局变量看起来比较奇怪,但ie模式能够运行,因为事件驱动程序设计模型中,一次只处理一个事件。由于从来不会并发处理两个事件,因此用全局变量存储当前在处理的事件的详细信息很安全。
ie中event对象是全局变量这一事实与标准2级DOM事件模型不兼容,因此出现了上面使用一行简单代码避开它的方法。
- function handleEvent(e){
- var evt = e || window.event;
- var evtTarget = evt.target || evt.srcElement;
- if(evtTarget.nodeType==3){
- evtTarget = evtTarget.parentNode;//for Safari;
- }
- }
1.event.srcElement问题
在IE下,event对象有srcElement属性,但是没有target属性;
在Firefox下,even对象有target属性,但是没有srcElement属性.
obj = event.srcElement ? event.srcElement : event.target;
2.上面提到了event,在两种浏览器中也存在问题
window.event只能在IE下运行,而不能在Firefox下运行,
这是因为Firefox的event只能在有事件发生的情况下使用
e = event?event:(window.event?window.event:null);
浙公网安备 33010602011771号