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

笔记:JS权威指南17章—事件和事件属性

目前使用的3中完全不同的不兼容的事件处理模型:
1.原始事件模型:通常非正式把它看作0级DOM API的一部分内容。尽管它的特性有限,但所有启用Javascript的浏览器都支持它,因此具有可移植性。
2.标准事件模型:2级DOM标准对它进行了标准化,除IE外的所有浏览器都支持他。
3.Internet Explorer事件模型:最初由IE4引入。具有标准事件模型的许多高级特性,但不具有全部特性。

把一个元素设置为多个文档元素的事件句柄:

//在链接前请求用户的确认
function confirmLink() {
	return confirm("您确认要访问“ + this.href + ” 吗?");
}
function confirmAllLinks() {
	for(var i = 0; i < document.links.length; i++) {
		document.links[i].onclick = confirmLink;
	}
}



假定对象o,具有mymethod方法,可以用下面代码注册一个事件句柄

button.onclick = o.mymethod


这个语句使button.onclick引用与o.mymethod相同的函数。现在这个函数既是o的方法,也是button的方法。当浏览器触发这个事件句柄时,它将把该函数作为button对象的方法调用,而不是作为o对象的方法调用。关键字this引用Button对象,而不是引用对象o。不要认为可以让浏览器把一个事件句柄作为其他对象的方法调用。如果想这样做,必须直接调用

button.onclick = function() { o.mymethod(); }

?

?

?

列表显示了所有事件模块、以及它定义的事件接口和它支持的事件类型。

模块名

事件接口

事件类型

HTMLEvents

Event

abort blur change erro focus load resrt resize scroll select submit unload

MouseEvents

MouseEvents

click mousedown mousemove mouseover mouseup

UIEvents

UIEvent

DOMActivate DOMFocusln DOMFocusOut

Event HTMLEvent 模块定义的事件类型使用 Event 接口。其他事件类型都使用该接口,即所有事件对象都实现了 Event 接口,并提供了适用于所有事件类型的详细信息。 Event 接口定义了如下属性:

type