This page is also available in English.
Contact Form 7 は数種類のカスタム DOM イベントを提供します。これらのイベントを JavaScript コード内で使用することにより、特定の状況で関数を実行することが可能になります。
ここでは Contact Form 7 が提供する DOM イベント、どのような状況でそれらのイベントが発生するか、また、コードでの使い方について説明します。DOM のイベントモデルに関する一般的な説明は省きますので、よくわからない場合は外部の資料を参照してください:
- DOM events (Wikipedia)
- Overview of Events and Handlers (MDN)
- Document Object Model (DOM) Level 2 Events Specification
Contact Form 7 のカスタム DOM イベント
wpcf7invalid— Ajax のフォーム送信が完了したが、正しくない入力があったためにメール送信は行われなかった場合に発生する。wpcf7spam— Ajax のフォーム送信が完了したが、スパム行為の疑いがあったためにメール送信は行われなかった場合に発生する。wpcf7mailsent— Ajax のフォーム送信が完了し、またメールの送信も行われた場合に発生する。wpcf7mailfailed— Ajax のフォーム送信が完了したが、メールの送信には失敗した場合に発生する。wpcf7submit— 他の条件に関係なく、Ajax のフォーム送信が完了した場合に発生する。
イベントハンドラーの実装
以下のコードはイベントハンドラーを登録する簡単な例です。この例では、関数は wpcf7submit イベントの通知を待ち、イベント発生時にはアラートを表示します。
var wpcf7Elm = document.querySelector( '.wpcf7' );
wpcf7Elm.addEventListener( 'wpcf7submit', function( event ) {
alert( "Fire!" );
}, false );
この例に見られるように、イベントハンドラー関数の登録には addEventListener() を使います。イベントターゲット (例中では wpcf7Elm) は form 要素ではなくその親にあたり wpcf7 クラスを持つ div 要素であることに注意してください。
wpcf7* イベントはいずれも DOM ツリーをドキュメントルートに向かってバブリングするので、特にイベントターゲットを指定する必要がない場合には document プロパティをイベントターゲットにすることで簡略化できます:
document.addEventListener( 'wpcf7submit', function( event ) {
alert( "Fire!" );
}, false );
対象のコンタクトフォームへのユーザー入力データはイベントオブジェクトの detail.inputs プロパティとしてイベントハンドラーに渡されます。detail.inputs のデータ構造はオブジェクトの配列であり、また個々のオブジェクトは name と value のプロパティを持ちます。
次の例では “your-name” 入力項目へのユーザー入力値にアクセスしています:
document.addEventListener( 'wpcf7submit', function( event ) {
var inputs = event.detail.inputs;
for ( var i = 0; i < inputs.length; i++ ) {
if ( 'your-name' == inputs[i].name ) {
alert( inputs[i].value );
break;
}
}
}, false );
このほかにもイベントハンドラーで利用できるイベントオブジェクトのプロパティがあります。
| プロパティ | 説明 |
|---|---|
| detail.contactFormId | コンタクトフォームの ID。 |
| detail.pluginVersion | Contact Form 7 プラグインのバージョン。 |
| detail.contactFormLocale | コンタクトフォームのロケールコード。 |
| detail.unitTag | コンタクトフォームのユニットタグ。 |
| detail.containerPostId | コンタクトフォームが置かれている投稿の ID。 |
例えば、特定のコンタクトフォーム (ID=123) のみに対して何かしたい場合は、次のコードのように detail.contactFormId プロパティを使うとよいでしょう:
document.addEventListener( 'wpcf7submit', function( event ) {
if ( '123' == event.detail.contactFormId ) {
alert( "The contact form ID is 123." );
// do something productive
}
}, false );