标签:
原文链接:http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-overview
DOM2事件模型旨在两个方面的设计。
事件流是一个过程,一个事件起源于DOM实现,通过它来传递到文档对象模型。事件捕获和事件冒泡方法,配合多种事件注册技术,使得事件可通过各种方法处理。可以在事件目标层面上处理,也可以在文档树种的事件目标的上级处理。
每个事件都有一个事件目标,DOM实现者通过该事件目标来控制该事件。这个事件目标被定义在事件的‘target’属性上。当事件到达该目标,任何注册在该事件目标上的监听方法将被触发。虽然该事件目标上的所有事件监听一定会被这个事件目标接收的任何事件触发,但是没有哪个规范指出它们相对事件目标上的其他监听者接收事件的顺序。如果一个事件没有使用事件捕获或事件冒泡,那么该事件流一定是最后一个被触发。如果使用了事件冒泡或事件捕获,那么事件流将按如下描述进行。
任何事件监听者内部抛出的异常都是阻止该事件继续冒泡。其他的事件监听者则按描述的方式继续进行。
事件监听者的行为可能引发其他的事件。另外的事件应该以异步方法被处理,而且可能引起事件模型的重入。
通过事件捕获,在事件被事件目标接收到之前,一个注册在事件目标祖先上的事件监听会影响这个事件。从树的顶端(通常是Document节点)的捕获,造成对称的反向冒泡。从文档树顶端到事件目标处的事件目标链在事件最初被绑定的时候已经决定了。如果在事件处理过程中发生了改变,事件流将基于最初的树状态进行。
一个绑定在时间目标上的事件监听可以选择通过将addEventListener方法的useCaptrue参数设置为true来使用事件捕获。因此,当一个给定类型的事件被绑定在该捕获对象的后代元素上时,该事件将触发文档树顶端到事件目标上所有的捕获事件监听。这个向下的冒泡将一直继续,直到事件到达事件目标。一个基于某个事件目标注册的捕获事件监听,不会被直接绑定在该事件目标上的事件所触发。
如果一个捕获事件监听想要阻止后来的事件发生,那么它需要调用事件接口的stopPropagation方法。它将阻止之后的时间调度,就算注册在相同层级上的另外的事件监听仍然会接收到该事件。一旦事件的stopPropagation方法被调用,之后对该方法的再次调用将不会有任何影响。如果不存在另外的捕获且stopPropagation没有被调用,那么事件会触发目标上的相应的监听器。
虽然事件捕获和事件委托类似,但还是有两点区别:
定义为冒泡的事件会循环处理一个相同的事件流,就像该事件流是非冒泡的一样。事件被绑定在它的事件目标上,且这里的所有事件监听被触发。冒泡事件会接着触发事件紧跟在目标父元素上方的链上另外的事件,检测其他注册在事件目标上的事件监听。这个向上的冒泡会一直持续到文档树的Document节点(包含Document节点)。捕获类的注册事件在该阶段不会被触发。从事件目标到文档树顶端的事件目标链在事件绑定初始化时已经被确定了。如果在事件处理过程中发生了任何改变,事件流将基于最初的树状态进行。
一些事件被设计成是可取消的。对于这些事件,DOM实现着通常有默认行为。例如浏览器对于超链接。如果用户点击了链接,默认通常会激活这个链接。在处理这些事件之前,实现者会检测注册的事件监听来接收该事件并将事件传递给这些监听者。这些监听者之后会选择取消实现者的默认星外或允许这个默认行为。但是取消浏览器中的超链接的默认行为将不会激活该超链接。
通过事件的preventDefault方法来进行默认行为取消。当一个或多个事件监听在事件流执行过程中调用了preventDefault方法,那么默认行为将会被取消。
不同的实现者会定义自己的默认行为。DOM不会尝试定义这些行为。
事件目标接口(定义在DOM2中)
EventTarget接口由实现者中支持DOM事件模型的Nodes来实现。因此,该接口通过在Node接口实例上使用特定绑定的方法来实现。该接口允许事件目标上的事件监听的注册和删除以及事件目标上的事件调度。
// Introduced in DOM Level 2:
interface EventTarget {
void addEventListener(in DOMString type,
in EventListener listener,
in boolean useCapture);
void removeEventListener(in DOMString type,
in EventListener listener,
in boolean useCapture);
boolean dispatchEvent(in Event evt)
raises(EventException);
};
- type(字符串类型)
用户注册的事件类型- listener (事件监听器类型)
该事件监听器承载了一个用户实现的接口,它包含了事件发生时要调用的方法。- useCapture(布尔类型)
如果为true,那么表明用户希望创建捕获。一旦创建了捕获,特定类型的事件将在被指派给树结构下方的所有事件目标之前被指派给注册的事件监听器。通过树向上冒泡的事件将不会触发一个指定使用捕获的事件。- 无返回值
- 不会抛出异常
- evt(事件类型)
指定用于处理事件的事件类型、表现、上下文信息。- 返回值
返回布尔类型的值,dispatchEvent的返回值用来表示处理事件的监听函数是否调用了preventDefault。如果调用了preventDefault,那么返回true,否则返回false。- 异常
UNSPECIFIED_EVENT_TYPE_ERROR: 在调用dispatchEvent前,当事件的类型没有在事件创建时被定义,会发生该异常。当指定事件类型为null或空时也会产生该异常。
- type (字符串类型)
指定要移除的事件的类型- listener (事件监听器类型)
该参数指定了要移除的事件监听器- useCapture (布尔值)
指定要移除的事件监听器是否被注册为一个捕获监听。如果监听器被注册了两次,一次为捕获一次为非捕获,那么这两个将被分别移除。捕获监听器的移除并不会影响该监听器的非捕获版本,反之亦然。- 无返回值
- 无抛出异常
方法
// Introduced in DOM Level 2:
interface EventListener {
void handleEvent(in Event evt);
};
- evt (事件类型)
该事件对象包含了事件的上下文信息。它也包含了stopPropagation方法和preventDefault方法,这两个方法用来确定事件流和默认行为。- 无返回值
- 无抛出异常
HTML4.0中的事件监听接口
在HTML4.0中,事件监听被描述为元素的属性。同样类型的事件绑定,后一个将会覆盖前一个。DOM事件模型允许在一个事件目标上注册多个监听器。为了达到这个目的,事件监听器将不再作为属性存在。
为了和HTML4.0兼容,实现者要考虑这个表示事件处理的属性。useCapture参数默认为false。该事件监听器和其他注册在事件目标上的事件监听器一样。如果表示事件监听器的属性改变,这回被当作是对原先注册的监听器的移除后又重新创建的一个新的监听器。没有任何技术支持来允许HTML4.0的事件监听器来获取为每个事件定义的上下文信息。事件接口
接口事件(定义在DOM2中)
Event接口用来在处理事件时提供事件的上下文信息。一个实现了Event接口的对象通常作为事件处理函数的第一个参数传入。还有更多的特定上下文信息通过从Event对象派生额外接口获得,包含和该类型事件直接相关的一些信息。这些信息都可以被处理函数获取。这些派生信息也可以用来实现一个传入到事件处理器中的对象。
接口定义:
// Introduced in DOM Level 2:
interface Event {
// PhaseType
const unsigned short CAPTURING_PHASE = 1;
const unsigned short AT_TARGET = 2;
const unsigned short BUBBLING_PHASE = 3;
readonly attribute DOMString type;
readonly attribute EventTarget target;
readonly attribute EventTarget currentTarget;
readonly attribute unsigned short eventPhase;
readonly attribute boolean bubbles;
readonly attribute boolean cancelable;
readonly attribute DOMTimeStamp timeStamp;
void stopPropagation();
void preventDefault();
void initEvent(in DOMString eventTypeArg,
in boolean canBubbleArg,
in boolean cancelableArg);
};
- AT_TARGET
处于事件评估阶段- BUBBLING_PHASE
处于事件冒泡阶段- CAPTURING_PHASE
处于事件捕获阶段
- bubbles (布尔值),只读
用来表示事件是否为冒泡事件。如果是冒泡事件则为true,否则为false。- cancelable(布尔值),只读
用来表示事件是否可取消其默认事件。如果默认行为可以被取消,则为true,否则为false。- currentTarget(事件目标类型),只读
用来表示正在处理事件监听的事件的事件目标。在捕获和冒泡阶段该值是很有用的。- eventPhase(无符号短整型),只读
用来表示事件流的当前阶段- target(事件目标类型),只读
用来表示事件起始于哪个事件目标- timeStamp(时间戳),只读
用来表示事件创建时间。一些系统实际上可能不会提供这个信息,并不是所有的事件都有timeStamp值。如果该值不存在,那么对它的调用将返回0。该时间为UTC时间1970年1月1号 0:0:0到当前的毫秒数。- type(字符串类型),只读
事件的名称(大小写敏感)。名字必须为一个XML name
- initEvent
该方法用来初始化一个通过DocumentEvent接口创建的事件。这个方法只能在事件通过dispatchEvent方法被调度之前使用,虽然它可以在这个阶段被调用多次。被多次调用时,以最后一次调用为主。如果从Event接口的子类中被调用,那么只有initEvent方法中定义的值会被改变,其他的属性不会被改变。
该方法的参数:
eventTypeArg(字符串)
指定事件类型。这个事件可以是本规范中定义的某个事件或是一个新的事件类型。该字符串必须是一个XML name。新的事件类型不能以字符串‘DOM’开头(包含任意大写,小写或大小写混合)。因为这个是以后DOM事件的保留字。强烈建议如果第三方要实现自己的额外方法,需要加上他们自己的前缀来避免混乱或和其他新事件冲突。
canBubbleArg(布尔值)
表示事件是否可以冒泡
cancelableArg(布尔值)
表示事件的默认事件是否能被取消
无返回值
无抛出异常- preventDefault
如果一个事件是可以被取消的,那么preventDefault方法用来指定该事件要被取消,也就是说实现者对其的默认行为不会发生。如果在事件流的任意阶段,调用preventDefault方法都使得事件被取消。事件上的任意默认行为都不会发生。对于不可取消默认行为的事件,该方法不起作用。一旦调用preventDefault方法,它将影响事件冒泡的剩余阶段。该方法可用在事件流的任一阶段。
无参数
无返回值
无抛出异常- stopPropagation
该方法用来在事件流中阻止之后的事件冒泡。如果事件监听器使用了该方法,那么事件将停止其在文档树上的冒泡。该事件将在事件流停止前调用当前事件目标上的所有监听器。该方法可用在事件流的任一阶段。
无参数
无返回值
无抛出异常
异常(定义在DOM2中的事件异常)
事件操作可能会抛出如定义在方法描述中的异常
接口定义事件异常码
// Introduced in DOM Level 2:
exception EventException {
unsigned short code;
};
// EventExceptionCode
const unsigned short UNSPECIFIED_EVENT_TYPE_ERR = 0;
一个用来表示错误产生类型的整型
恒量
UNSPECIFIED_EVENT_TYPE_ERR
在调用方法前,如果事件类型并未通过事件初始化定义 ,或事件类型为null或空时,都会抛出该异常。文档事件接口
文档事件接口(定义在DOM2)
文档事件接口提供一种机制,通过该机制,用户可以创建一个实现者支持的事件。这意味着文档事件接口可以在同一个对象上实现,该对象在一个支持事件模型的实现中实现了Document接口。
接口定义:
// Introduced in DOM Level 2:
interface DocumentEvent {
Event createEvent(in DOMString eventType)
raises(DOMException);
};
- createEvent
参数
eventType(字符串类型)
该参数指定了要创建的事件接口的类型。如果指定的事件接口是被实现者支持的,那么该方法返回一个指定接口类型的事件。如果事件是通过dispatchEvent方法调用的,那么相应的事件初始化方法需要在创建后调用,以便初始化该事件的一些值。例如,用户想同步一种UIEvent就要调用以UIEvent为参数调用createEvent。然后在新的UIEvent上调用initUIEvent方法来设置UIEvent的会被调用的特性类型和一些上下文信息。
在用户不方便或不必要亲自创建一个事件时,使用createEvent方法创建一个事件。当实现者对事件的支持不足时,用户使用dispatchEvent方法来支持他们自己的事件实现。
返回值
新创建的事件
异常
NOT_SUPPORTED_ERR:当实现者不支持要求的事件接口类型时。事件模型定义
DOM2事件模型允许一个DOM实现者支持多种事件模型。模型被定义为允许额外的新事件模型。DOM不会尝试定义所有的可能事件。为了达到交互目的,DOM会定义一个与设备弱相关的用户交互的模型,一个UI逻辑事件模型,或一个文档变化事件模型。第三方定义的任一新的事件类型都不能以‘DOM‘开头(不管任意大小写组合)。这个前缀是作为以后的DOM事件模型的保留字。强烈建议如果第三方要实现自己的额外方法,需要加上他们自己的前缀来避免混乱或和其他新事件冲突。用户交互事件模型
用户交互事件模型由列在HTML4.0中的事件和另外在DOM0级浏览器中支持的事件组成。
一个DOM应用以UIEvent和2.0为参调用DOMImplementation的hasFeature(feature,version)方法来检测一个用户交互事件是否被实现者支持。为了全面支持这个模型,一个实现者必须同时支持本规范中定义的Events功能和在DOM2中定义的Views功能。你还可以参照DOM2 Core规范中的conformance来获取更多信息。
注:使用UIEvents为输入参数调用DocumentEvent接口的createEvent方法来创建一个UIEvent实例。
UIEvent接口(定义在DOM2中)
UIEvent接口为响应的用户交互事件提供了特定的上下文信息。
接口定义:
// Introduced in DOM Level 2:
interface UIEvent : Event {
readonly attribute views::AbstractView view;
readonly attribute long detail;
void initUIEvent(in DOMString typeArg,
in boolean canBubbleArg,
in boolean cancelableArg,
in views::AbstractView viewArg,
in long detailArg);
};
- detail (长整型),只读
指定事件的一些细节信息。依赖于事件类型。- view(views::AbstractView类型),只读
view属性标识事件从哪个AbstractView产生。
- initUIEvent
该方法用来初始化一个通过DocumentEvent接口创建的UIEvent的值。这个方法只能用来在UIEvent通过dispatchEvent方法调用前使用,虽然在这个阶段它可能会被调用多次。当多次被调用时,以最后一次调用为准。
参数:
typeArg(字符串类型)
指定事件类型
canBubbleArg(布尔类型)
指定事件是否能冒泡
cancelableArg(布尔类型)
指定是否可以阻止事件的默认行为
viewArg(views::AbstractView类型)
指定事件的抽象视图
detailArg(长整型)
指定事件的细节信息
无返回值
无抛出异常
这些不同事件的发生场景:
DOMFocusIn
当一个事件目标获得焦点时,发生DOMFocusIn事件,例如,通过定位设备的tab键切换到一个元素上。它不同于HTML的focus事件,DOMFocusIn可被任何可获得焦点的事件目标使用,并不单单是表单控制。- 是否冒泡:是
- 是否可取消: 否
- 上下文信息:无
DOMFocusOut
当一个事件目标失去焦点时,发生DOMFocusOut事件。例如通过一个定位设备的tab键将焦点移出一个元素。它不同于HTML的blur事件,DOMFocusOut事件可应用于任何可获得焦点的事件目标,并不单单是表单控制。- 是否冒泡:是
- 是否可取消: 否
- 上下文信息:无
DOMActivate
当一个元素被激活时,发生该事件。例如,通过鼠标点击或按下键盘。一个数字类型的参数将被传入以说明发生了什么:1表示普通的激活(如普通点击或回车),2表示极度活跃(例如双击或shift+Enter)- 是否冒泡:是
- 是否可取消: 是
- 上下文信息:细节信息(数字类型的值)
鼠标事件类型
鼠标事件类型用HTML4.0中列出的事件和DOM0中定义的另外的事件组成。这类事件模型用于鼠标输入设备的使用。
一个DOM应用可以使用MouseEvents, 2.0为参数调用DOMImplementation接口的hasFeaturee(feature,version)方法来检测实现者是否支持鼠标事件模型。为了全面支持这个模型,一个实现者必须同时支持本规范中定义的Events功能和在DOM2中定义的Views功能。你还可以参照DOM2 Core规范中的conformance来获取更多信息。
注:以功能字符串MouseEvents为输入参数调用DocumentEvent接口的createEvent方法来创建一个MouseEvent接口的实例。
MouseEvent接口(DOM2中介绍)
MouseEvent接口提供相应鼠标事件的上下文信息。
detail属性继承至UIEvent,指定在用户活动中同一屏幕下鼠标按下和松开的次数。用户开始活动时,值记为1,之后每次连续的单击和松开增1。如果用户在鼠标按下和弹起的过程中移动了鼠标,那么该值会置为0,表明当前无单击事件发生。
在内嵌元素的鼠标事件发生在更深层次的内嵌元素上时。目标元素的祖先元素会使用冒泡来获取发生在它后代元素上的鼠标事件。
接口定义:
// Introduced in DOM Level 2:
interface MouseEvent : UIEvent {
readonly attribute long screenX;
readonly attribute long screenY;
readonly attribute long clientX;
readonly attribute long clientY;
readonly attribute boolean ctrlKey;
readonly attribute boolean shiftKey;
readonly attribute boolean altKey;
readonly attribute boolean metaKey;
readonly attribute unsigned short button;
readonly attribute EventTarget relatedTarget;
void initMouseEvent(in DOMString typeArg,
in boolean canBubbleArg,
in boolean cancelableArg,
in views::AbstractView viewArg,
in long detailArg,
in long screenXArg,
in long screenYArg,
in long clientXArg,
in long clientYArg,
in boolean ctrlKeyArg,
in boolean altKeyArg,
in boolean shiftKeyArg,
in boolean metaKeyArg,
in unsigned short buttonArg,
in EventTarget relatedTargetArg);
};
- altKey(布尔值类型),只读
用来指定在事件发生过程中alt键是否被按下,在一些系统中这个键可能被映射为另外的名字。- button(无符号短整型),只读
在鼠标事件发生时,button用来表示哪个鼠标键改变了状态。button的值为0时表示左键,为1时表示中键(如果存在的话),为2时表示右键。对于左手使用鼠标者来说,这些值按从右往左的顺序。- clientX(长整型),只读
事件发生时,相对DOM实现者的用户区域的水平坐标- clientY(长整型),只读
事件发生时,相对DOM实现者的用户区域的垂直坐标- ctrlKey(布尔类型),只读
用来表示当事件发生时,ctrl键是否被按下- metaKey(布尔类型),只读
用来表示当事件发生时,meta键是否被按下。在一些系统中这个键可能被映射为另外的名字。- relatedTarget(EventTarget类型),只读
用来表示UI事件的第二事件目标。当前这个属性在mouseover事件中用来表示指针离开的事件目标,而在mouseout事件中表示指针进入的事件目标。- screenX(长整型),只读
用来表示事件发生时,相对于屏幕坐标系统的水平坐标- screenY(长整型),只读
用来表示事件发生时,相对于屏幕坐标系统的垂直坐标- shiftKey(布尔类型),只读
用来表示当事件发生时,shift键是否被按下
- initMouseEvent
该方法用来初始化一个通过DocumentEvent接口创建的鼠标事件。该方法只能在鼠标事件通过dispatchEvent方法调用前使用,虽然它可能会被调用多次。如果被多次调用,则以最后一次调用为准。
typeArg(字符串类型)
指定事件的类型
canBubbleArg(布尔类型)
指定事件是否可以冒泡
cancelableArg(布尔类型)
指定事件是否可以取消其默认事件
viewArg(views::AbstractView类型)
指定事件的抽象视图
detailArg(长整型)
指定事件的鼠标点击次数
screenXArg(长整型)
指定事件在屏幕上的X坐标
screenYArg(长整型)
指定事件在屏幕上的Y坐标
clientXArg(长整型)
指定事件在用户区域上的X坐标
clientYArg(长整型)
指定事件在用户区域上的Y坐标
ctrlKeyArg(布尔类型)
指定事件发生时ctrl键是否被按下
altKeyArg(布尔类型)
指定事件发生时alt键是否被按下
shiftKeyArg (布尔类型)
指定事件发生时shift键是否被按下
metaKeyArg(布尔类型)
指定事件发生时meta键是否被按下
buttonArg(无符号短整型)
指定事件的鼠标键
relatedTarget(EventTarget类型)
指定事件的相关事件目标
没有返回值
没有抛出异常不同的鼠标事件:
- 是否冒泡:是
- 是否可取消:是
- 上下文信息:screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, button, detail
- 是否冒泡:是
- 是否可取消:是
- 上下文信息:screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, button, detail
- 是否冒泡:是
- 是否可取消:是
- 上下文信息:screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, button, detail
- 是否冒泡:是
- 是否可取消:是
- 上下文信息:screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, relatedTarget指定了定位设备从哪个事件目标离开
- 是否冒泡:是
- 是否可取消:否
- 上下文信息:screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey
- 是否冒泡:是
- 是否可取消:是
- 上下文信息:screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, relatedTarget指定了定位设备从哪个事件目标进入
键盘事件
DOM2事件规范没有支持键盘事件模型。针对键盘输入设备的事件模型定义在之后的DOM规范中。突变事件类型
该事件类型用来对文档树的改变做出通知,包含对属性或文字的改变。突变事件都是不可冒泡的。因为根据相关事件的取消,如果文档树发生了改变,对于改变文档树的目前DOM接口使用非常难。
文档树的很多单一改变都会引起多种突变事件被触发。这些事件会被留给实现者,而不是根据文档树的没有可能的改变去定义这些事件。
一个DOM应用以MutationEvents和2.0为参数使用DOMImplementation接口的hasFeature(feature,version)方法来检测实现者支持了突变事件。为了全面支持这个模型,一个实现者必须同时支持本规范中定义的Events功能。你还可以参照DOM2 Core规范中的conformance来获取更多信息。
注:使用字符串‘MutationEvents‘为输入参数调用DocumentEvent接口的createEvent方法来创建一个MutationEvent接口。
突变事件接口(定义在DOM2中)
MutationEvent接口提供相应的突变事件的上下文信息。
接口定义:attrChangeType:
// Introduced in DOM Level 2:
interface MutationEvent : Event {
// attrChangeType
const unsigned short MODIFICATION = 1;
const unsigned short ADDITION = 2;
const unsigned short REMOVAL = 3;
readonly attribute Node relatedNode;
readonly attribute DOMString prevValue;
readonly attribute DOMString newValue;
readonly attribute DOMString attrName;
readonly attribute unsigned short attrChange;
void initMutationEvent(in DOMString typeArg,
in boolean canBubbleArg,
in boolean cancelableArg,
in Node relatedNodeArg,
in DOMString prevValueArg,
in DOMString newValueArg,
in DOMString attrNameArg,
in unsigned short attrChangeArg);
};
一个用来指定属性是通过何种方式改变的整型。
- 是否冒泡:是
- 是否可取消默认事件:否
- 上下文信息:无
- 是否冒泡:是
- 是否可取消默认事件:否
- 上下文信息:relatedNode处理父节点
- 是否冒泡:是
- 是否可取消默认事件:否
- 上下文信息:relatedNode处理父节点
- 是否冒泡:否
- 是否可取消默认事件:否
- 上下文信息:无
- 是否冒泡:否
- 是否可取消默认事件:否
- 上下文信息:attrName, attrChange, prevValue, newValue, relatedNode
- 是否冒泡:否
- 是否可取消默认事件:否
- 上下文信息:prevValue, newValue
HTML事件由HTML4.0中的事件和定义在DOM0中的另外的事件组成。
一个DOM应用使用‘HTMLEvents‘和‘2.0‘为参数使用DOMImplementation接口的hasFeature(feature,version)方法来检测实现者是否支持HTML事件模型。为了全面支持这个模型,一个实现者必须同时支持本规范中定义的Events功能。你还可以参照DOM2 Core规范中的conformance来获取更多信息。
注:使用‘HTMLEvents‘为输入参数使用DocumentType接口的createEvent方法来为HTML事件模型创建一个Event实例。
HTML事件使用基本DOM事件接口来传递上下文信息。
各种HTML事件:
- 是否冒泡:否
- 是否可取消默认事件:否
- 上下文信息:无
- 是否冒泡:否
- 是否可取消默认事件:否
- 上下文信息:无
- 是否冒泡:是
- 是否可取消默认事件:否
- 上下文信息:无
- 是否冒泡:是
- 是否可取消默认事件:否
- 上下文信息:无
- 是否冒泡:是
- 是否可取消默认事件:否
- 上下文信息:无
- 是否冒泡:是
- 是否可取消默认事件:否
- 上下文信息:无
- 是否冒泡:是
- 是否可取消默认事件:是
- 上下文信息:无
- 是否冒泡:是
- 是否可取消默认事件:否
- 上下文信息:无
- 是否冒泡:否
- 是否可取消默认事件:否
- 上下文信息:无
- 是否冒泡:否
- 是否可取消默认事件:否
- 上下文信息:无
- 是否冒泡:是
- 是否可取消默认事件:否
- 上下文信息:无
- 是否冒泡:是
- 是否可取消默认事件:否
- 上下文信息:无
标签:
原文地址:http://www.cnblogs.com/rubyisaPM/p/4479817.html