與 Automation 腳本部件類似,Behavior 腳本部件可以說明自定義事件。這些事件可以在腳本部件內激活,并在包含文檔內進行處理。事件可以按下述方法在 <public> 元素內聲明:
<public> <event name="onResultChange" /> </public>
然后,就可以在腳本中通過調用 fireEvent 方法來激活該事件:
<script language="JScript">
// 此處為其他代碼。
fireEvent("onResultChange");
// 此處為其他代碼。
</script>
通過說明與元素已經定義的同名事件,一個操作可以覆蓋該元素的缺省操作。例如,說明了 onclick 事件的操作可以覆蓋該元素缺省的 onclick 事件。
自定義的腳本部件事件可以訪問 DHTML 事件對象,該對象負責保存事件特有的信息。使用這個對象可以:
在腳本部件的代碼中,調用 createEventObject 方法來創(chuàng)建事件對象的新實例,然后對這個新的事件對象設置一個或多個屬性。當調用 fireEvent 方法時,可以用事件名稱來傳遞這個新的事件對象。
要創(chuàng)建一個新的 expando 屬性,只需在腳本中給其賦值時命名。下面演示了如何為事件對象創(chuàng)建一個名為 myprop 的新屬性:
oEvent = createEventObject(); oEvent.myprop = "a new value"
注意 只有當使用 Microsoft® JScript® (或 JavaScript) 時才可以創(chuàng)建 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>