与 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>