JavaScript Event学习第五章:高级事件注册模型
在这一章我会讲解两种高级时间注册模型:W3C和微软的。因为这两个方法都不能跨浏览器,所以在现在看来他们的使用场合并不多。
W3C和微软都着力于发展自己的事件注册模型来取代Netscape的传统模型。虽然对于微软的模型我不是很感冒,但是w3c的还是不错的,除了这个鼠标定位 的问题。不过现在只有小部分浏览器支持。 W3C W3C事件注册模型的关键就是addEventListener()。你给他三个参数:事件类型,要执行的函数和一个布尔值(true或者false)我一会再解释。把我们熟知的doSomething()函数注册到一个元素的onclick事件上,你可以这样做: element.addEventListener('click',doSomething,false) 这种模型的魅力在于我们可以想加多少监听就可以加多少。如果用我们之前的传统模式里面的例子,我们就可以写成这样: element.addEventListener('click',startDragDrop,false) 2 element.addEventListener('click',spyOnUser,false) 当用户点击元素的时候两个事件处理程序都会执行。需要注意的是W3C标准不能确定哪个事件先执行。所以你也不能认为startDragDrop()就在spyOnUser()之前执行。 移除事件处理程序也是非常的简单,用removeEventListener()就行了。所以: element.removeEventListener('click',spyOnUser,false) 就会移除第二个事件处理程序但是第一个不会发生变化。非常漂亮的程序,完全解决了传统模式下的问题。 匿名函数 element.addEventListener('click',function () { 2 this.style.backgroundColor = '#cc0000' 3 },false) true或者false this 不幸的是,虽然this非常的强大,但是如果你不是明确的知道他怎么运作的话使用起来还是比较难的。关于这个我在另一个地方有详细的讨论。 在w3c模型下他的运作和在传统模式下是一样的:他表示现在正在处理事件的HTML元素。 element.addEventListener('click',doSomething,false); another_element.addEventListener('click',doSomething,false); function doSomething() { this.style.backgroundColor = '#cc0000'; } 如果你把doSomething()注册在任意一个HTML元素的click实践上,那么当用户点击的时候这个元素的背景就会变成红色。 哪个事件处理程序被注册了呢? 还好的是removeEventListener()不会因为你没有注册元素的某个事件而返回错误,所以你可以不用担心的使用removeEventLister()。 微软 注册一个事件处理程序,attach到一个元素: element.attachEvent('onclick',doSomething) 或者,你需要两个事件处理程序: element.attachEvent('onclick',startDragDrop) element.attachEvent('onclick',spyOnUser) 移除一个也非常简单: element.detachEvent('onclick',spyOnUser) 缺陷 而且微软的标准只被IE支持,也不能用来跨浏览器。就算你只是给windows浏览器写脚本也最好别用,因为冒泡问题会让事情变得不可收拾。 如果你想继续学习,请看下一章。 原文地址:http://www.quirksmode.org/js/events_advanced.html (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |