第2章 事件和监听
事件是JavaScript 应用程序的核心,是所有内容的驱动,它决定了在应用程序产生用户交互的起始时刻。然而在JavaScript 诞生之初“事件”的实现并不标准,甚至非常丑陋。在之后的浏览器大战中网景和微软分道扬镳,它们各自实现的事件模型互不兼容。尽管后来W3C 对此做了标准化,但IE 仍然坚持使用与W3C 不兼容的事件模型,直到最新发布的IE9 才遵循标准。
幸运的是,有很多诸如jQuery 和Prototype 的类库很好地处理了兼容性问题,对外提供了统一的API 来实现事件。但是了解事件的机制仍然是非常重要的,因此这里首先讲解W3C 中的事件模型,然后展示各种流行类库的一些实例。
广州网站建设,广州网站设计,广州网站制作,网站建设,网站设计,广州网站建设公司,广州网站设计公司
监听事件
绑定事件监听的函数叫做addEventListener(),它有3 个参数:type(比如click)、listener(比如callback)及useCapture(后续会讲到useCapture)。使用前两个参数可以给一个DOM 元素绑定一个函数,当特定的事件(比如点击)被触发时执行这个函数:
- var button = document.getElementById("createButton");
- button.addEventListener("click", function(){ /* ... */ }, false);
可以使用removeEventListener() 来移除事件监听,参数和传入addEventListener() 的一样。如果监听的函数是匿名函数,没有任何引用指向它,在不销毁这个元素的前提下,这个监听是无法被移除的:
- var div = document.getElementById("div");
- var listener = function(event) { /* ... */ };
- div.addEventListener("click", listener, false);
- div.removeEventListener("click", listener, false);
带入listener 函数的第1 个参数是event 对象,通过event 对象可以得到事件的相关信息,比如时间戳、坐标和事件宿主元素(target)。它同样包含很多方法来停止事件冒泡和阻止事件的默认行为。
广州网站建设,广州网站设计,广州网站制作,网站建设,网站设计,广州网站建设公司,广州网站设计公司
不同的浏览器对事件类型的支持也不尽相同,但所有现代浏览器都支持这些事件:
click
dblclick
mousemove
mouseover
mouseout
focus
blur
change(表单输入框特有)
submit(表单特有)
可以从PPK 的文章中(http://goo.gl/l7Zqk)查看怪异模式支持的事件类型。