第10章 事件


10.1 事件驱动程序设计

在 JavaScript 中,最为重要的一件事就是对事件进行处理。与通常的 GUI 应用程序相同,Web 应用程序也是通过事件驱动程序设计的方式来实现其功能的。在事件驱动程序设计中,需要注册不同事件的处理方式。

在注册了事件的处理方式之后,浏览器就会在该事件发生时执行所注册的处理方式。所登录的处理方式被称作事件处理程序、事件句柄或事件侦听器。

对于 Web 应用来说,有下面这些代表性的事件:点击某个元素、将鼠标移动至某个元素上方、按下键盘上某个键,等等。此外,读取页面或跳转至其他页面等行为也会引发事件。根据这些不同的用户操作,浏览器会触发相应的事件。之后,执行事件处理程序,处理被触发的事件。

所以说,JavaScript 程序设计的基本内容之一就是获取需要对事件进行捕捉的元素,并针对该元素注册相应的事件处理程序。

DOM Level 2 中定义了标准的事件模型。大部分现代浏览器都是根据这一标准实现的。但是,在Internet Explorer 8 以及更早版本中,采用了自定义的事件模型实现方式。从功能上来说,这确实和标准事件模型没有太大的差别,但 API 是完全不同的,应当加以注意。

10.2 事件处理程序/事件侦听器的设定

对事件的处理方式被称为事件处理程序或事件侦听器,但这两者之间其实是有区别的。它们的设定方法并不相同,因此,两者支持的处理元素数量也不同。对于 1 个元素或事件,只能设定 1 个事件处理程序。而与之相对的,可以为其同时设定多个事件侦听器。

下面是一些对事件处理进行设定的方式。

  • 指定为 HTML 元素的属性(事件处理程序)
  • 指定为 DOM 元素的属性(事件处理程序)
  • 通过 EventTarget.addEventListener() 进行值定(事件侦听器)

指定为 HTML 元素的属性

将事件处理程序指定为 HTML 元素的属性是一种最为简单的设定事件处理程序的方式。在下面的例子中,将会在发生按钮点击事件时显示含有 “黄子涵是帅哥!” 和 “黄子涵是靓仔!” 消息的提示对话框。





    
    
    
    测试



    



在这个例子中,通过字符串对 onclick 事件处理程序将要执行的 JavaScript 代码进行了设定。如果代码包含多行,则可以通过分号分隔。当然,事先另外定义一个函数之后再执行该函数的方式也不会有问题。

这种方式的优点在于,设定步骤非常简单,并且能够确保事件处理程序会在载入时被设定。而如果使用之后所介绍的一些方法则可能会产生一些问题。即元素在被载入时,其事件处理程序可能还没有被注册,这时用户执行任何本应触发事件的操作,也不会有任何效果。与之相对地,将事件处理程序指定为 HTML 元素的属性的话,就能够确保它在载入的同时被设定。

在书写上也有一些需要注意的地方,就是这里的 onclick 全都是以小写字母书写的。HTML 不会区分大小写字母,所以即使在这里使用了 onClick 也不会有什么差别。但是,XHTML 则会区分大小写字母。考虑到这点,最好还是使用全部小写的 onclick,这样将有助于提高代码的兼容性。

事件处理程序

如果事件处理程序返回了一个 false 值,则会取消该事件的默认行为。例如,当onsubmit 事件处理程序返回了一个 false 时,表单的内容将不会被发送。这在使用 onsubmit 事件处理程序验证表单内容时会很有用,可以在发现内容有误时返回 false
以取消表单数据的发送。

在事件处理程序中返回false





    
    
    
    测试



    黄子涵

    



10.3 事件的触发

10.4 事件的传播

10.5 事件所具有的元素

10.6 标准事件

10.7 自定义事件

相关