客户端JavaScript程序采用了异步事件驱动编程模型。
Window事件是指事件的发生与浏览器窗口本身而非窗口中显示的任何特定文档内容相关。
当用户在文档上移动或单击鼠标时都会产生鼠标事件。
事件处理程序的属性的名字是由”on“后面跟着事件名组成: onclick, onchange, onload等。注意这些属性名是区分大小写,所有都是小写。
属性值应该是JS代码字符串,这段代码应该是事件处理程序函数的主体,而非完整的函数声明。
例如:
<button onclick="alert(’ sss‘);"></button>
如果包含多条语句,使用分号分隔这些语句或断开属性值使其跨多行。
在除IE8之前版本外的所有浏览器都支持的标准事件模型中,任何能称为事件目标的对象 —— 这些对象包括Window对象,Document对象和所有文档元素 —— 都定义了一个名叫 addEventListener()的方法,使用这个方法可以为事件目标注册事件处理程序。
addEventListener()接受三个参数:
可以通过多次调用addEventListner()为同一个对象注册同一事件类型的多个处理程序函数。当对象上发生事件时,所有该事件类型的处理程序都会按照注册的顺序调用。
相对于addEventListener(0的是 removeEventListener()方法,它同样有三个参数。
IE9之前的IE不支持addEventListener()和removeEventListener()。
通常调用事件处理程序时把事件对象作为它们的一个参数。
IE8及以前版本中,通过设置属性注册事件处理程序时,并未传递事件对象,取而代之,需要通过全局对象window.event来获得事件对象。
例如:
function handler(event){ event = event || window.event; ... ... }
当通过设置属性注册事件处理程序时,在事件处理程序内,this关键字指的是事件目标。
甚至当使用 addEventListener(0注册时,调用的处理程序使用事件目标作为它们的this值。
通过设置对象属性或HTML属性注册事件处理程序的返回值有时是非常有意义的。通常,返回值 false 就是告诉浏览器不要执行这个事件相关的默认操作。
事件处理程序的返回值只对通过属性注册的处理程序才有意义。使用addEventListener()注册事件处理程序转而必须调用preventDefault()方法或设置事件对象的returnValue属性。
浏览器按照如下规则调用所有的事件处理程序:
当事件目标是WINDOW对象或其他一些单独对象时,浏览器简单地通过调用对象上适当的处理程序响应事件。
当事件目标是文档或文档元素时,情况比较复杂。
在调用在目标元素傻姑娘注册的事件处理函数后,大部分事件会”冒泡“到DOM树根。调用目标的父元素的事件处理程序,然后调用在目标的祖父元素上注册的事件处理程序。这会一直到Document对象,最后到达WINDOW对象。
事件冒泡为在大量单独文档元素上注册处理程序提供了替代方案,即在共同的祖先元素上注册一个处理程序处理所有的事件。
取消事件的浏览器默认操作。