与 Automation 脚本部件类似,Behavior 脚本部件可以说明自定义事件。这些事件可以在脚本部件内激活,并在包含文档内进行处理。事件可以按下述方法在 <public> 元素内声明:
<public> <event name="onResultChange" /> </public>
然后,就可以在脚本中通过调用 fireEvent 方法来激活该事件:
<script language="JScript">
// 此处为其他代码。
fireEvent("onResultChange");
// 此处为其他代码。
</script>
通过说明与元素已经定义的同名事件,一个操作可以覆盖该元素的缺省操作。例如,说明了 onclick 事件的操作可以覆盖该元素缺省的 onclick 事件。
自定义的脚本部件事件可以访问 DHTML 事件对象,该对象负责保存事件特有的信息。使用这个对象可以:
在脚本部件的代码中,调用 createEventObject 方法来创建事件对象的新实例,然后对这个新的事件对象设置一个或多个属性。当调用 fireEvent 方法时,可以用事件名称来传递这个新的事件对象。
要创建一个新的 expando 属性,只需在脚本中给其赋值时命名。下面演示了如何为事件对象创建一个名为 myprop 的新属性:
oEvent = createEventObject(); oEvent.myprop = "a new value"
注意 只有当使用 Microsoft® JScript® (或 JavaScript) 时才可以创建 expando 属性。Microsoft® Visual Basic® Scripting Edition (VBScript) 中不支持这一特性。
下面的脚本部件片段是从 calculator 脚本部件示例中摘出来的。该示例定义了一个 onResultChange 事件,只要结果被更改,就会为包含文档激活这个事件。事件特有的信息(实际的计算结果)将通过称为 result 的 expando 属性来传递。
注意 CDATA 项是必需的,以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<public>
<event name="onResultChange" />
</public>
<implements type="Behavior">
<attach event="onclick" handler="doCalc"/>
</implements>
<script language="JScript">
<![CDATA[
function doCalc()
{
// 此处为进行计算的代码。结果写入
// sResult 变量。
oEvent = createEventObject();
oEvent.result = sResult;
fireEvent("onResultChange",oEvent);
}
]]>
</script>
下面演示了包含页面的样式。在 onResultChange 事件被激活时,就从 DHTML 的 window.event 对象的 expando 属性 result 提取出计算结果,并在 resultWindow <DIV> 元素中显示该结果。
<HTML>
<HEAD>
<xml:namespace prefix="LK" />
<style>
LK\:CALC {behavior:url(calc.wsc)}
</style>
<script language="JScript">
function showResults(){
resultWindow.innerText=window.event.result;
}
</script>
</HEAD>
<LK:CALC id="myCalc" onResultChange="showResults()">
<TABLE>
<TR>
<DIV ID=resultWindow
STYLE="border: '.025cm solid gray'"
ALIGN=RIGHT>0.</DIV>
</TR>
<TR>
<TD><INPUT TYPE=BUTTON VALUE=" 0 "></TD>
<TD><INPUT TYPE=BUTTON VALUE="+/-"></TD>
<TD><INPUT TYPE=BUTTON VALUE=" . "></TD>
<TD><INPUT TYPE=BUTTON VALUE=" + "></TD>
<TD><INPUT TYPE=BUTTON VALUE=" = "></TD>
<TR>
</TABLE>
</LK:CALC>
</HTML>