使用事件控制操作

   

Microsoft FrontPage 中有两种类型的事件,一种由 Application 对象模型驱动,另一种由 Page 对象模型驱动。Application 对象模型的事件可用来控制站点在什么条件下发布,是否一触发 OnPageClose 事件就保存网页,或者是否一创建新网页就设置样式、字体或背景。有关 Application 对象模型事件的详细信息,请单击下列事件列表中的事件之一。

OnAfterPageSave OnPageNew
OnBeforePageSave OnPageOpen
OnAfterWebPublish OnWebClose
OnBeforeWebPublish OnWebNew
OnAfterPageWindowViewChange OnPageWindowActivate
OnAfterWebWindowSubViewChange OnRecalculateHyperlinks
OnAfterWebWindowViewChange OnWebFileCheckOut
OnBeforePageWindowViewChange OnWebOpen
OnBeforeWebWindowSubViewChange OnPageClose

在 Microsoft Internet Explorer DHTML 对象模型中,事件处理器是使用下列方法之一创建的:

可以在 script 标记内创建过程或函数来声明事件处理器函数,再定义要为其生成事件的元素的“On*”属性,由此属性调用该过程。例如,若要捕获鼠标在锁定标记上的单击操作,可以使用下例中所示的 HTML 代码。

<html>
<head>
<script language="VBScript">
sub test
msgbox "You clicked"
End Sub
</script>
</head>
<body>
<a href="CatchMouse.htm" onclick="CatchMe"> This is an anchor, click here</a>
</body>
</html>

声明事件处理代码的另一种方法是创建包含 FOR= 属性的 script 标记,如下例所示。

<SCRIPT FOR=myanchor EVENT=onclick LANGUAGE="VBScript">
msgbox "You Clicked"
</SCRIPT>
<a id="myanchor" href="CatchMouse.htm" onclick="CatchMe">this is an anchor, click on it </a>

但是,在 FrontPage Page 对象模型中,编程所用的是与 Internet Explorer 兼容但用于设计阶段的事件和对象。若要设计实时运行的事件,可使用标准的 Microsoft Visual Basic 5.0(或更高版本)关键字来访问 Page 对象模型事件,这与访问 Web 对象模型事件的方法相同。该方法结合了上述两种技术。下列示例捕获 FrontPage 中超链接的 OnClick 事件。

在 Visual Basic 编辑器内,插入一个类模块并命名为 CatchOnClick。将下列代码添加到类模块中。

Dim WithEvents eAnchor As FPHTMLAnchorElement
Dim WithEvents eDoc As FPHTMLDocument
Dim e As IHTMLEventObj

Private Sub Class_Initialize()
Set eDoc = ActiveDocument
Set eAnchor = eDoc.links(0)
End Sub

Private Function eAnchor_onclick() As Boolean
Set e = eAnchor.Document.parentWindow.event
If (MsgBox("OnClick Event for " & e.srcElement.tagName & _
    " would you like to cancel the event bubbling?", _
    vbYesNo) = vbYes) Then
    e.cancelBubble = True
    e.returnValue = False
Else
    e.cancelBubble = False
    e.returnValue = True
End If
End Function

Private Function eDoc_onclick() As Boolean
MsgBox "OnClick event for the Document object"
End Function

然后添加一个标准模块并添加下列代码。

Public e As CatchOnClick
Sub GetClick()
Set e = New CatchOnClick
End Sub

注意  若要运行本示例,请执行下列步骤:

此时会显示提示,指出 OnClick 事件已触发。该提示也会询问用户程序是否应将事件沿事件链向上传递。如果选择“是”,则 OnClick 事件将传递到 Document 对象以进行处理。

若要控制事件将传递到哪个 Document 对象,必须设置 cancelBubblereturnValue 事件。cancelBubble 事件用来取消在事件链上向上传递事件。如果不想让 OnClick 事件向上传递到上一级的 OnClick 事件,请将 IHTMLEventObjectcancelBubble 属性设置为 True,否则,请将 cancelBubble 属性设置为 False。例如,如果文档上放有一个具有 OnClick 事件的图像,而且文档本身也具有 OnClick 事件,则如果不想让 OnClick 事件向上传递到文档的 OnClick 事件,请将该图像的 IHTMLEventObject cancelBubble 属性设置为 True

returnValue 属性用于控制事件触发时 FrontPage 所采取的默认操作。如果使用了上述放置在文档中的图像的示例,并且在 OnClick 事件中将图像的 IHTMLEventObjectreturnValue 属性设为 False,则快捷菜单将会禁用(因为用鼠标右键单击快捷菜单是 OnClick 事件的默认操作)。