與 Automation 腳本部件類似,Behavior 腳本部件可以說(shuō)明自定義事件。這些事件可以在腳本部件內(nèi)激活,并在包含文檔內(nèi)進(jìn)行處理。事件可以按下述方法在 <public> 元素內(nèi)聲明:
<public> <event name="onResultChange" /> </public>
然后,就可以在腳本中通過(guò)調(diào)用 fireEvent 方法來(lái)激活該事件:
<script language="JScript"> // 此處為其他代碼。 fireEvent("onResultChange"); // 此處為其他代碼。 </script>
通過(guò)說(shuō)明與元素已經(jīng)定義的同名事件,一個(gè)操作可以覆蓋該元素的缺省操作。例如,說(shuō)明了 onclick 事件的操作可以覆蓋該元素缺省的 onclick 事件。
自定義的腳本部件事件可以訪問(wèn) 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é)果)將通過(guò)稱為 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>