不像标准的 Visual Basic 编程那样,每一个对象必须有它自己的唯一事件处理程序,动态 HTML 中的对象可以共享事件处理程序。当一个子对象发生一个事件时,事件可以沿着页面中的分层结构链向上游历直到它遇到一个事件处理程序来处理这个事件。这个过程叫做事件气泡。
下面的图形显示了事件气泡的过程。
事件的气泡过程
在这个图片中,该图表显示了在 DHTML 应用程序中一个 HTML 页面结构的一部分。顶层是文档对象,它包含该 HTML 页面。主体 (Body) 元素是 HTML 页面中的顶层标记。主体中是一个表,表内是一个超连接。在某种意义下,超连接可以被认为是子表,反过来,表又是一个子体标记,如此反复。
当超连接事件激发时,Visual Basic 可以将事件沿着分层结构向上传送气泡直到它找到了一个事件处理程序。如果在超连接中没有找到一个事件处理程序,它在表中查找,然后再查找主体,然后是 DHTMLPage 对象,最后是文档。在它第一次找到一个事件处理程序时,事件停止传送气泡。
注意 事件向上传送气泡的分层结构是由 HTML 流中元素的位置确定的。这个次序不必对应在屏幕上查看的项目次序。例如,在上面的图片中,“Hyperlink”元素在 HTML 流中出现在表的下面。如果使用在 Hyperlink 上的位置属性移动它,使得当在浏览器中显示时它出现在别的地方,但因为它在 HTML 流中的位置没有改变,它的事件将仍然向上传送气泡到表。
事件气泡可以减少需要编写代码的数量。例如,假设当一个复选框被选择时,想使第二组选项可以使用。不必为窗体中的每一个复选框编写一个单击事件过程,而可以编写窗体本身的过程。当复选框的一个被选择时,事件将自动地向上传送气泡到父窗体并在那里处理。
如果不要元素的事件沿着分层结构向上传送气泡,可以取消元素的事件气泡。可以通过在任何的事件处理程序中设置事件对象的 cancelBubble 属性为 true 来停止传送气泡。在处理程序返回以后,事件停止传送气泡并立即结束。
详细信息 关于事件如何传送气泡或取消传送气泡的详细信息,请参阅 Internet Client SDK 中“动态 HTML”部分的“了解事件模型”。