JavaScript 什么是事件

广义上讲,JavaScript 脚本中的事件是指用户载入目标页面直到该页面被关闭期间浏览器的动作及该页面对用户操作的响应。

事件的复杂程度大不相同,简单的如鼠标的移动、当前页面的关闭、键盘的输入等,复杂的如拖曳页面图片或单击浮动菜单等。

事件处理器是与特定的文本和特定的事件相联系的 JavaScript 脚本代码,当该文本发生改变或者事件被触发时,浏览器执行该代码并进行相应的处理操作,而响应某个事件而进行的处理过程称为事件处理。

下面就是简单的事件触发和处理过程,如图所示。

如前所述,JavaScript 脚本中的事件并不限于用户的页面动作如MouseMove、Click 等,还包括浏览器的状态改变,如在绝大多数浏览器获得支持的Load、Resize 事件等。

Load 事件在浏览器载入文档时触发,如果某事件(如启动定时器、提前加载图片等)要在文档载入时触发,一般都在标记里面加入类似“onload=“MyFunction()””的语句;

Resize 事件则在用户改变了浏览器窗口的大小时触发,当用户改变窗口大小时,有时需改变文档页面的内容布局,使其以恰当、友好的方式显示给用户。

浏览器响应用户的动作,如鼠标单击按钮、链接等,并通过默认的系统事件与该动作相关联,但用户可以编写自己的脚本,来改变该动作的默认事件处理器。

举个简单的例子,模拟用户单击页面链接的例子,该事件产生的默认操作是浏览器载入链接的href 属性对应的URL 地址所代表的页面,但利用JavaScript 脚本可很容易编写另外的事件处理器来响应该单击鼠标的动作。

考察如下代码:<a name=MyA href="http://www.baidu.com/" onclick="javascript:this.href='http://www.sina.com/'">MyLinker</a>鼠标单击页面中名为“MyLinker”的文本链接,其默认操作是浏览器载入该链接的href属性对应的URL 地址(本例中为“http://www.baidu.com/”)所代表的页面,但程序员编写了自定义的事件处理器即:onclick="javascript:this.href='http://www.sina.com/'通过该JavaScript 脚本代码,上述事件处理器取代了浏览器默认的事件处理器,并将页面引导至URL 地址为“http://www.sina.com/”指向的页面。

现代事件模型中引入 Event 对象,它包含其它对象使用的常量和方法的集合。

当事件发生后,产生临时的Event 对象实例,并附加当前事件的信息如鼠标定位、事件类型等,然后传递给相关的事件处理器进行处理。

事件处理完毕后,该临时Event 对象实例所占据的内存空间被清理出来,浏览器等待其他事件的出现并进行处理。

如果短时间内发生的事件较多,浏览器按事件按发生的顺序将这些事件排序,然后按照该顺序依次执行。

事件发生的场合很多,包括浏览器本身的状态改变和页面中的按钮、链接、图片、层等。

同时根据DOM 模型,文本也可以作为对象,并响应相关动作,如鼠标双击、,文本被选择等。

当然,事件的处理方法甚至于结果同浏览器环境有很大的关系,但总的来说,浏览器的版本越新,所支持的事件处理器就越多,支持也就越完善。

基于此,在编写JavaScript 脚本时,要充分考虑浏览器的兼容性,以编写适合大多数浏览器的安全脚本。