Event - Prototype JavaScript 框架

Xunxin Prototype API

Event

♪ 令人惊叹的混乱 ♫

对于编写跨浏览器的脚本而言,事件管理是一个让人头痛的地方。

确实,一个异常明显的问题是:所有的人都遵循 W3C 的规范,而 MSIE 却另起炉灶。但是另外还有许多遍布各处的诡异的问题, 一不小心就会让你掉入陷井,例如基于 KHTML 的浏览器(Konqueror 和 Safari)的 keypress/keydown 事件。当然,也别忘了 MSIE 处理废弃的事件句柄时导致的内存泄漏问题。

Prototype 的补救!

当然,Prototype 很好的解决了这个问题,你甚至不会觉察到这些问题的存在。在 Event 命名空间中,包含了许多方法 (已在这个页面中列出)。所有的方法都具有一个用于表示当前事件对象的参数,它以非常友好的方式提供你所需要的信息, 并且跨越了所有主要的浏览器。

Event 同时提供了一个标准的键盘代码表,可以用在与键盘相关的事件中。在这个命名空间中,定义了以下一些常量: KEY_BACKSPACE, KEY_TAB, KEY_RETURN, KEY_ESC, KEY_LEFT, KEY_UP, KEY_RIGHT, KEY_DOWN, KEY_DELETE, KEY_HOME, KEY_END, KEY_PAGEUP, KEY_PAGEDOWN。这些常量名称都具有自我描述的特性。

下面这些函数经常会用到: observeelementstop。至于其它的,将取决于你的应用。

事件对象的实例方法
1.6

在 Prototype 1.6 中,所有 Event 对象的方法也可以作为事件对象自身的实例方法使用:

以前的版本

$('foo').observe('click', respondToClick); 
function respondToClick(event) { 
	var element = Event.element(event); 
	element.addClassName('active'); 
}

现在的版本

$('foo').observe('click', respondToClick); 
function respondToClick(event) { 
	var element = event.element(); //注意这一句的区别
	element.addClassName('active'); 
}

Event 包含的方法已通过 Event.extend 增加到事件对象作为实例方法,这跟 Element 通过 Element.extend 将其所包含的方法添加到 DOM 节点是一样的。 在使用 Event.observe 方法注册事件处理程序时,Prototype 会自动扩展事件对象( 译注:调用 Event.extend 方法)。如果想采用不同的方法来加载事件处理程序,那你必须手动调用 Event.extend 来扩展事件对象。

方法

element

Event.element(event) -> Element

返回触发事件的 DOM 元素。

extend
1.6

Event.extend(event)

Event.Methods 包含的所有方法来扩展 event

findElement

Event.findElement(event, tagName) -> Element

从触发事件的 DOM 元素开始(包含该元素),由里而外搜索第一个具有指定标签名称的 DOM 元素。

isLeftClick

Event.isLeftClick(event) -> Boolean

判断鼠标相关的事件是否是由“左键”(主功能键)引发的。

observe

Event.observe(element, eventName, handler[, useCapture = false])

在 DOM 元素上注册事件处理程序。

pointerX

Event.pointerX(event) -> Number

返回鼠标事件发生时鼠标所在的绝对水平位置。

pointerY

Event.pointerY(event) -> Number

返回鼠标事件发生时鼠标所在的绝对垂直位置。

stop

Event.stop(event)

停止事件的传播,并阻止事件被触发后最终的默认行为。

stopObserving

Event.stopObserving(element, eventName, handler[, useCapture = false])

注销事件处理程序。

unloadCache
1.6

Event.unloadCache()

注销所有通过 observe 方法注册的事件处理程序。从 1.6 版开始该方法不再可用。