Behavior スクリプト コンポーネントのカスタム イベントの公開

Behavior スクリプト コンポーネントでは、オートメーション スクリプト コンポーネントと同じように、スクリプト コンポーネントの内側で発生するカスタム イベントを公開することができます。また、Behavior スクリプト コンポーネントをドキュメント内で処理することもできます。イベントは、次のように <public> 要素で宣言されます。

<public>
   <event name="onResultChange" />
</public>

イベントは、スクリプト内の fireEvent メソッドを呼び出すことによって発生します。

<script language="JScript">
   // ここにほかのコードを記述します。
   fireEvent("onResultChange");
   // ここにほかのコードを記述します。
</script>

ビヘイビアでは、要素で既に定義されている同じ名前のイベントを公開することで、要素の既定のビヘイビアを定義し直すことができます。たとえば、onclick イベントを公開するビヘイビアでは、要素の既定の onclick イベントを定義し直すことができます。

カスタム イベントの情報を取得または設定する

スクリプト コンポーネントのカスタム イベントは、イベント固有の情報を保持している DHTML event オブジェクトにアクセスできます。このオブジェクトは、次の目的に使用できます。

  • イベントを呼び出したときに設定された既存の event オブジェクトのプロパティ (keyCode など) を変更する。
  • イベントにイベント情報を戻すために、event オブジェクトの新しいプロパティ (expando) を作成する。

スクリプト コンポーネントのコードで、event オブジェクトの新しいインスタンスを作成するために createEventObject メソッドを呼び出し、新しい event オブジェクトに 1 つ以上のプロパティを設定します。fireEvent メソッドを呼び出した場合は、イベント名と共に新しい event オブジェクトを渡すことができます。

新しい expando プロパティは、スクリプト内でプロパティの値を代入する際に、名前を付けるだけで作成できます。次のコードは、event オブジェクトに myprop という新しいプロパティを作成する例です。

oEvent = createEventObject();
oEvent.myprop = "a new value"

メモ   expando プロパティを作成できるのは、Microsoft® JScript® (または JavaScript) を使用する場合だけです。この機能は、Microsoft® Visual Basic® Scripting Edition (VBScript) ではサポートされていません。

次のコードは、計算機のスクリプト コンポーネントからの抜粋です。この例では、onResultChange というカスタム イベントを定義します。このイベントは、計算結果が変更されると常にドキュメントに対して発生します。イベント固有の情報 (実際の計算結果) は、result という expando プロパティをとおして渡されます。

メモ   <script> 要素内のスクリプトを隠蔽するには、CDATA セクションが必要です。詳細については、「スクリプト コンポーネント ファイルと 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>

参照

Behavior スクリプト コンポーネントのプロパティとメソッドの公開