與 Automation 腳本部件類似,Behavior 腳本部件可以說明自定義事件。這些事件可以在腳本部件內(nèi)激活,并在包含文檔內(nèi)進(jìn)行處理。事件可以按下述方法在 <public> 元素內(nèi)聲明:
<public> <event name="onResultChange" /> </public>
然后,就可以在腳本中通過調(diào)用 fireEvent 方法來(lái)激活該事件:
<script language="JScript">
// 此處為其他代碼。
fireEvent("onResultChange");
// 此處為其他代碼。
</script>
通過說明與元素已經(jīng)定義的同名事件,一個(gè)操作可以覆蓋該元素的缺省操作。例如,說明了 onclick 事件的操作可以覆蓋該元素缺省的 onclick 事件。
自定義的腳本部件事件可以訪問 DHTML 事件對(duì)象,該對(duì)象負(fù)責(zé)保存事件特有的信息。使用這個(gè)對(duì)象可以:
在腳本部件的代碼中,調(diào)用 createEventObject 方法來(lái)創(chuàng)建事件對(duì)象的新實(shí)例,然后對(duì)這個(gè)新的事件對(duì)象設(shè)置一個(gè)或多個(gè)屬性。當(dāng)調(diào)用 fireEvent 方法時(shí),可以用事件名稱來(lái)傳遞這個(gè)新的事件對(duì)象。
要?jiǎng)?chuàng)建一個(gè)新的 expando 屬性,只需在腳本中給其賦值時(shí)命名。下面演示了如何為事件對(duì)象創(chuàng)建一個(gè)名為 myprop 的新屬性:
oEvent = createEventObject(); oEvent.myprop = "a new value"
注意 只有當(dāng)使用 Microsoft® JScript® (或 JavaScript) 時(shí)才可以創(chuàng)建 expando 屬性。Microsoft® Visual Basic® Scripting Edition (VBScript) 中不支持這一特性。
下面的腳本部件片段是從 calculator 腳本部件示例中摘出來(lái)的。該示例定義了一個(gè) onResultChange 事件,只要結(jié)果被更改,就會(huì)為包含文檔激活這個(gè)事件。事件特有的信息(實(shí)際的計(jì)算結(jié)果)將通過稱為 result 的 expando 屬性來(lái)傳遞。
注意 CDATA 項(xiàng)是必需的,以使 <script> 元素中的腳本成為不透明的。詳細(xì)信息請(qǐng)參閱腳本部件文件和 XML 一致性。
<public>
<event name="onResultChange" />
</public>
<implements type="Behavior">
<attach event="onclick" handler="doCalc"/>
</implements>
<script language="JScript">
<![CDATA[
function doCalc()
{
// 此處為進(jìn)行計(jì)算的代碼。結(jié)果寫入
// sResult 變量。
oEvent = createEventObject();
oEvent.result = sResult;
fireEvent("onResultChange",oEvent);
}
]]>
</script>
下面演示了包含頁(yè)面的樣式。在 onResultChange 事件被激活時(shí),就從 DHTML 的 window.event 對(duì)象的 expando 屬性 result 提取出計(jì)算結(jié)果,并在 resultWindow <DIV> 元素中顯示該結(jié)果。
<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>