プライマリ・コンテンツに移動

Oracle® Application Express APIリファレンス リリース5.1 E85937-02 |
| 目次 | 索引

前 | 次 |

# 31.15 イベント

次の項で、Application Express固有のイベントについて説明します。ほとんどの場合、ブラウザとAPEX固有のイベントへの応答には動的アクションを利用します。この項は、これらのイベントを直接JavaScriptコードから使用しようとするJavaScriptプログラマ向けです。

- apexafterclosedialog
- apexafterrefresh
- apexbeforerefresh
- apexbeforepagesubmit
- apexbeginrecordedit
- apexendrecordedit
- apexpagesubmit
- apexwindowresized

## 31.15.1 apexafterclosedialog

このイベントは、動的アクションの「ダイアログを閉じる」アクション、または「ダイアログを閉じる」プロセスによって、Application Expressのモーダル・ダイアログ・ページを閉じます。これは、「ダイアログのクローズ」動的アクション・イベントと同等です。このイベントは、接続の状態が変更されたときにトリガーされます。

ボタンの場合はボタン要素です。リストのダイアログ・ページへのリンクの場合はリスト・リージョン要素です。グローバル・トップまたはサイド・ナビゲーションで使用されるリストの場合、またはトリガー要素を特定できないその他のケースの場合、イベントはドキュメント`apex.gPageContext$`でトリガーされます。イベント・ハンドラは、これらのプロパティを持つオブジェクト引数を受け取ります。

表31-81 apexafterclosedialog

プロパティ | タイプ | 説明
--- | --- | ---
`dialogPageId` | String | 閉じられたダイアログ・ページのページ番号。
`*` | String | 「ダイアログを閉じる」プロセスまたは動的アクション設定「戻すアイテム」でリストされた各ページ・アイテムには、アイテムと同じ名前のプロパティがあります。値はアイテムの値です。

注意:

このイベントは、モーダル・ダイアログ・ページではなく、親すなわちコール側ページでトリガーされます。方法に関係なく、ダイアログがいつ閉じられるかを確認したい場合には、jQuery UIのdialogcloseイベントを使用します。

例

この例では、モーダル・ダイアログ・ページが閉じられるときに、`emp`という静的IDのリージョンをリフレッシュします。

    apex.gPageContext$.on( "apexafterclosedialog", function( event, data ) {
        apex.region( "emp" ).refresh();
    });

## 31.15.2 apexafterrefresh

このイベントは、様々なページ・アイテムまたは列アイテムがサーバーからの新しいコンテンツやデータによってリフレッシュされた直後に、それらのアイテムによってトリガーされます。これは、動的アクション・イベントの「リフレッシュ後」と同等です。具体的には、カスケード式LOVの親アイテム属性をサポートするアイテムはいずれも、このイベントをトリガーします。`refreshObject`オプションを指定した場合、このイベントは`apex.server.plugin`および`apex.server.process` APIによってもトリガーされます。イベントは、アイテム要素、または`refreshObject`によって指定された要素に対してトリガーされます。イベント・ハンドラは、`refreshObjectData`で指定されたデータを受け取ります(存在する場合)。

例

この例では、リフレッシュの進行中に、`B1`という静的IDのボタンを無効にします。

    apex.jQuery( "body" ).on( "apexbeforerefresh", function() {
        apex.jQuery( "#B1" ).prop( "disabled", true);
    }).on( "apexafterrefresh", function() {
        apex.jQuery( "#B1" ).prop( "disabled", false);
    });

参照:

apex.serverネームスペース

## 31.15.3 apexbeforerefresh

このイベントは、様々なページ・アイテムまたは列アイテムがサーバーからの新しいコンテンツやデータによってリフレッシュされる直前に、それらのアイテムによってトリガーされます。これは、動的アクション・イベントの「リフレッシュ前」と同等です。具体的には、カスケード式LOVの親アイテム属性をサポートするアイテムはいずれも、このイベントをトリガーします。`refreshObject`オプションを指定した場合、このイベントは`apex.server.plugin`および`apex.server.process` APIによってもトリガーされます。イベントは、アイテム要素、または`refreshObject`によって指定された要素に対してトリガーされます。イベント・ハンドラは、`refreshObjectData`で指定されたデータを受け取ります(存在する場合)。

例

この例では、リフレッシュの進行中に、`B1`という静的IDのボタンを無効にします。

    apex.jQuery( "body" ).on( "apexbeforerefresh", function() {
        apex.jQuery( "#B1" ).prop( "disabled", true);
    }).on( "apexafterrefresh", function() {
        apex.jQuery( "#B1" ).prop( "disabled", false);
    });

参照:

apex.serverネームスペース

## 31.15.4 apexbeforepagesubmit

このイベントは、`apex.submit`または`apex.confirm`によってページが発行されたときにトリガーされます。これには、アクション「ページの送信」と、動的アクション「ページの送信」のボタンが含まれます。これは、動的アクション・イベントの「ページの送信前」と同等です。ページの検証前にトリガーされます。`apex.gPageContext$`でトリガーされます。これは、Desktop UIページと、jQuery Mobile UIページのpage divのドキュメントです。このイベントは、動的アクションの「確認」または「イベントの取消」によって取り消すことができるので、実際に送信されるページに依存することはできません。ページが実際に送信される前に実行するコードが必要な場合は、`apexpagesubmit`イベントを参照してください。

イベント・ハンドラが、実行時間の長い処理や非同期の処理を実行しないようにしてください。具体的には、同期または非同期のAjaxリクエストを実行しないようにします。イベント・ハンドラは、リクエスト値である文字列引数を受け取ります。

例

この例では、ページ・アイテム`P1_CHECK_ME`に対して追加の検証を実行します。これによって送信ボタンを機能させるには、「検証の実行」属性を`Yes`に設定し、アプリケーション互換性モードを5.1以上に、`apex.submit`または`apex.confirm`の検証オプションをtrueに設定する必要があります。

    apex.jQuery( apex.gPageContext$ ).on( "apexbeforepagesubmit", function() {
        var item = apex.item("P1_CHECK_ME" ),
            value = item.getValue();
        if ( value !== "valid" ) { // replace with desired constraint check
            item.node.setCustomValidity( "Text field needs to be valid" );
        }else {
            item.node.setCustomValidity( "" );
        }
    });

参照:

apexpagesubmit

## 31.15.5 apexbeginrecordedit

このイベントは、対話グリッドなど列アイテムをサポートするリージョンが、レコードの編集を開始するときにトリガーされます。一般的には、列アイテムに対して動的アクションを使用し、「初期化時に実行」属性を`Yes`に設定します。これは、「対話グリッド行の初期化」動的アクション・イベントと同等です。

編集を実行しているウィジェットでトリガーされます。すべての列アイテムが初期化された後でトリガーされます。イベント・ハンドラは、これらのプロパティを持つオブジェクト引数を受け取ります。

表31-82 apexbeginrecordedit

プロパティ | タイプ | 説明
--- | --- | ---
`recordId` | String | 主キー列の値。主キーが複数ある場合、これは主キー値をシリアライズしたJSON配列です。
`model` | モデル | リージョン・ウィジェットによって使用されるモデル。
`レコード` | 配列 | オブジェクト | 編集している現在のレコード。このレコードは、プロパティ・モデルで指定されるモデルに属し、必ずモデルAPIを使用して変更する必要があります。

注意:

モデルまたはレコードを使用するには、文書化されていない`apex.model API`を使用する必要があります。

例

この例は、対話グリッドでEMP表を編集する`apexbeginrecordedit`イベントに対応しています。リージョンには、`emp`という静的IDが指定されます。SAL列には、`c_sal`という静的IDが指定されます。

    apex.region( "emp" ).widget().on( "apexbeginrecordedit", function( event, data ) {
        var salary = apex.item( "c_sal" ).getValue();
         // use data.recordId or access any of the column items using apex.item API });

## 31.15.6 apexendrecordedit

このイベントは、対話グリッドなど列アイテムをサポートするリージョンが、レコードの編集を終了するときにトリガーされます。

編集を実行しているウィジェットでトリガーされます。列アイテムの変更があった場合にすべてのモデルが更新され、列アイテムが検証された後でトリガーされます。イベント・ハンドラは、これらのプロパティを持つオブジェクト引数を受け取ります。

表31-83 apexendrecordedit

プロパティ | タイプ | 説明
--- | --- | ---
`recordId` | String | 主キー列の値。主キーが複数ある場合、これは主キー値をシリアライズしたJSON配列です。
`model` | モデル | リージョン・ウィジェットによって使用されるモデル。
`レコード` | 配列 | オブジェクト | 編集している現在のレコード。このレコードは、プロパティ・モデルで指定されるモデルに属し、必ずモデルAPIを使用して変更する必要があります。

注意:

モデルまたはレコードを使用するには、文書化されていない`apex.model API`を使用する必要があります。

例

この例は、対話グリッドでEMP表を編集する`apexendrecordedit`イベントに対応しています。リージョンには、`emp`という静的IDが指定されます。SAL列には、`c_sal`という静的IDが指定されます。

    apex.region( "emp" ).widget().on( "apexendrecordedit", function( event, data ) {
        var salary = apex.item( "c_sal" ).getValue();
         // use data.recordId or access any of the column items using apex.item API });

## 31.15.7 apexpagesubmit

このイベントは、`apex.submit`または`apex.confirm`によってページが発行されたときにトリガーされます。これには、アクション「ページの送信」と、動的アクション「ページの送信」のボタンが含まれます。ページの検証後にトリガーされます。`apex.gPageContext$`でトリガーされます。これは、Desktop UIページと、jQuery Mobile UIページのpage divのドキュメントです。このイベントは、ページの送信前にページ・アイテムを設定または変更する最後のチャンスです。

イベント・ハンドラが、実行時間の長い処理や非同期の処理を実行しないようにしてください。具体的には、同期または非同期のAjaxリクエストを実行しないようにします。イベント・ハンドラは、リクエスト値である文字列引数を受け取ります。

例

この例では、ページの送信前にページ・アイテム`P1_VALUE`を大文字に変更します。

    apex.jQuery( apex.gPageContext$ ).on( "apexpagesubmit", function() {
        var item = apex.item("P1_VALUE");
        item.setValue( item.getValue().toUpperCase());
    });

## 31.15.8 apexwindowresized

このイベントは、ウィンドウのサイズ変更が終了した200ミリ秒後にウィンドウでトリガーされます。ウィンドウのサイズ変更後に、このイベントがページ・コンテンツを調整またはサイズ変更するのをリスニングします。場合によっては、ウィンドウ・サイズ変更イベントよりこのほうが適しています。ウィンドウ・サイズ変更イベントはサイズ変更のたびに何度もトリガーされますが、このイベントはウィンドウのサイズ変更後に1度しか実行されないからです。

例

この例は`apexwindowresized`イベントに対応しており、新しい高さと幅に基づいてページ・コンテンツを変更します。

    apex.jQuery( window ).on( "apexwindowresized", function( event ) {
        var window$ = apex.jQuery( this ),
              height = window$.height(),
              width = window$.width();
        // update page content based on new window height and width
    });