日期:2014-05-16  浏览次数:20359 次

JavaScript Event学习:高级事件注册模型

W3C和微软都着力于发展自己的事件注册模型来取代Netscape的传统模型。虽然对于微软的模型我不是很感冒,但是w3c的还是不错的,除了这个鼠标定位 的问题。不过现在只有小部分浏览器支持。

  W3C

  W3C的DOM层面事件规范注意到了传统模式的问题。他对于你想在一个元素上绑定多个事件提供了一个很好的解决办法。

  W3C事件注册模型的关键就是addEventListener()。你给他三个参数:事件类型,要执行的函数和一个布尔值(true或者false)我一会再解释。把我们熟知的doSomething()函数注册到一个元素的onclick事件上,你可以这样做:

element.addEventListener('click',doSomething,false)

?这种模型的魅力在于我们可以想加多少监听就可以加多少。如果用我们之前的传统模式里面的例子,我们就可以写成这样:

element.addEventListener('click',startDragDrop,false)
element.addEventListener('click',spyOnUser,false)

?

当用户点击元素的时候两个事件处理程序都会执行。需要注意的是W3C标准不能确定哪个事件先执行。所以你也不能认为startDragDrop()就在spyOnUser()之前执行。

  移除事件处理程序也是非常的简单,用removeEventListener()就行了。所以:

element.removeEventListener('click',spyOnUser,false)

?

就会移除第二个事件处理程序但是第一个不会发生变化。非常漂亮的程序,完全解决了传统模式下的问题。

  匿名函数

  在W3C模式下你依然可以使用匿名函数:

element.addEventListener('click',function () {
            this.style.backgroundColor = '#cc0000'
      },false)

?

true或者false