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