document.write('
解析:
使用事件:
(1)当我们要阻止浏览器中某个 DOM 元素的默认行为时,在 W3C 标准里
调用 e.preventDefault(),而在 IE 下则通过设置 window.event.returnValue=false 来
实现。
(2)当我们要阻止冒泡事件时,在 W3C 标准里调用 e.stopPropagation(),而
在 IE 下通过设置 window.event.cancelBubble=true 来实现。
差别:
(1)Traditional Module。
传统方式的事件模型即直接在 DOM 元素上绑定事件处理器,例如:
window.onload=function(){…}
obj.onmouseover=function(e){…}
obj.onclick=function(){…}
首先这种方式无论在 IE 还是 Firefox 等其他浏览器上,都可以成功运行,这
便是它最大的优势,而且在 Event 处理函数内部的 this 变量无一例外都被绑定到
当前 DOM 元素,这使得 JavaScript 程序员可以大大利用 this 关键字做很多事情。
至于它的缺点也很明显,就是传统方式只支持 Bubbling,而不支持 Capturing,并
且在 DOM 元素上一次只能绑定一个事件处理器,无法实现多 Handler 绑定,最
后就是 function 参数中的 event 参数只对非 IE 浏览器有效果(因为 IE 有 window.
event)。
(2)W3C (Firefox.e.g) Event Module。
Firefox 等浏览器很坚决地遵循 W3C 标准来制定浏览器事件模型,使用
addEventListener 和 removeEventListener 两个函数,看几个例子:
indow.addEventListener("load",function(){…},false);
document.body.addEventListener("keypress",function{…},false);
obj.addEventListener("mouseover",MV,true);
function MV(){…}
addEventListener 带有三个参数,第一个参数是事件类型,就是我们熟知的那些事件名字去掉前面的“on”,第二个参数是处理函数,可以直接给函数自变
量或者函数名,第三个参数是 boolean 值,表示事件是否支持 Capturing。
W3C 的事件模型优点是 Bubbling 和 Capturing 都支持,并且可以在一个
DOM 元素上绑定多个事件处理器,各自并不会冲突。并且在处理函数内部时,
this 关键字仍然可以使用只想被绑定的 DOM 元素。另外 function 参数列表的第
一个位置(不管是否显示调用)永远都是 event 对象的引用。
至于它的缺点,很不幸地就是在市场份额最大的 IE 浏览器下不可使用这一点。
(3)IE Event Module。
IE 自己的事件模型跟 W3C 类似,但主要是通过 attachEvent 和 detachEvent 两
个函数来实现的。依旧看几个例子:
window.attachEvent("onload",function(){…});
document.body.attachEvent("onkeypress",myKeyHandler);
可以发现,它跟 W3C 的区别是没有第三个参数,而且第一个表示事件类型
的参数也必须把“on”加上。
这种方式的优点就是在同一个 DOM 元素上能绑定多个事件处理函数。
至于它的缺点,为什么如今在实际开发中很少见呢?首先 IE 浏览器本身只
支持 Bubbling,不支持 Capturing;而且在事件处理的 function 内部,this 关键字
也无法使用,因为 this 永远都只想得到 window object 这个全局对象。要想得到
event 对象,必须通过 window.event 方式 ;最后一点,在别的浏览器中,它显然

是无法工作的。 

');