document.write('
解析:
如果在使用 JavaScript 时涉及 event 处理,就需要知道 event 在不同的浏览
器中的差异,主要的 JavaScript 事件模型有三种,它们分别是 NN4、IE4+ 和
W3C/Safar。
1.window.event
【分析说明】先看一段代码:
function et(){
 alert(event);//IE: [object]
}
以上代码在 IE 中运行的结果是 [object],而在 Firefox 中无法运行。
因为在 IE 中 event 作为 window 对象的一个属性可以直接使用,但是在
Firefox 中却使用了 W3C 的模型,它是通过传参的方法来传播事件的,也就是
说,你需要为你的函数提供一个事件响应的接口。
【兼容处理】添加对 event 的判断,根据浏览器的不同来得到正确的 event。
function et(){
 evt=evt?evt:(window.event?window.event:null);
// 兼容 IE 和 Firefox
 alert(evt);
}
2.键盘值的取得
【分析说明】IE 和 Firefox 获取键盘值的方法不同,可以理解为,Firefox 下
的 event.which 与 IE 下的 event.keyCode 相当。
function myKeyPress(evt){
 // 兼容 IE 和 Firefox 获得 keyBoardEvent 对象
 evt = (evt) ? evt : ((window.event) ? window.event : "")
 // 兼容 IE 和 Firefox 获得 keyBoardEvent 对象的键值
 var key = evt.keyCode?evt.keyCode:evt.which;
 if(evt.ctrlKey && (key == 13 || key == 10)){
 // 同时按下 Ctrl+Enter 组合键
 //do something;
 }
}
3.事件源的获取
【分析说明】在使用事件委托时,通过事件源获取来判断事件到底来自哪个
元素,但是,在 IE 下,event 对象有 srcElement 属性,却没有 target 属性 ;在
Firefox 下,even 对象有 target 属性,却没有 srcElement 属性。
【兼容处理】
ele=function(evt){ // 捕获当前事件作用的对象
evt=evt||window.event;
return
(obj=event.srcElement?event.srcElement:event.target;);
}
4.事件监听
【分析说明】在事件监听处理方面,IE 提供了 attachEvent 和 detachEvent 两
个接口,而 Firefox 提供的是 addEventListener 和 removeEventListener。
【兼容处理】最简单的兼容性处理就是封装这两套接口。
function addEvent(elem, eventName, handler) {
 if (elem.attachEvent) {
 elem.attachEvent("on" + eventName, function(){
 handler.call(elem)});
 // 此处使用回调函数 call(),让 this 指向 elem
 } else if (elem.addEventListener) {
 elem.addEventListener(eventName, handler, false);
 }
 }
 function removeEvent(elem, eventName, handler) {
if (elem.detachEvent) {
 elem.detachEvent("on" + eventName, function(){
 handler.call(elem)});
 // 此处使用回调函数 call(),让 this 指向 elem
 } else if (elem.removeEventListener) {
 elem.removeEventListener(eventName, handler,
 false);
 }
}
需要特别注意,在 Firefox 下,事件处理函数中的 this 指向被监听元素本
身,而在 IE 下则不然 , 可使用回调函数 call,让当前上下文指向监听的元素。
5.鼠标位置
【分析说明】在 IE 下,even 对象有 x、y 属性,但是没有 pageX、pageY 属性;
在 Firefox 下,even 对象有 pageX、pageY 属性,但是没有 x、y 属性。
【兼容处理】使用 mX(mX = event.x ? event.x : event.pageX;) 来代替 IE 下的
event.x 或者 Firefox 下的 event.pageX。复杂点还要考虑绝对位置。
function getAbsPoint(e){
 var x = e.offsetLeft, y = e.offsetTop;
 while (e = e.offsetParent) {
 x += e.offsetLeft;
 y += e.offsetTop;
 }
alert("x:" + x + "," + "y:" + y);

');