入力連動グループ
通常、各項目は入力後にフォーカスが外れるとバリデートが始まります。ところが、複数の入力項目を入力中は同じグループに所属する要素のバリデートを待って欲しい場合があります。この場合、以下のような書き方で、入力状態を連動させることができます。
<div data-fk-group> <input type="text" name="mail_head"> <?= $mail_head->marker_tag() ?> @ <input type="text" name="mail_host"> <?= $mail_host->marker_tag() ?> <?= $mail_head->error_tag() ?> <?= $mail_host->error_tag() ?> </div>
'mail_head' => REQ(), 'mail_host' => REQ(),
サブバリデート
例えば上の例で言うと、2つの入力欄をまとめてメールアドレスかどうかチェックしたいですよね?そういった、要素ごとのチェック以外に、まとめてチェックしたい場合に定義できます。エラーメッセージを1つにまとめるのにも利用できます。
<div data-fk-group="_mail"> <input type="text" name="mail_head"> @ <input type="text" name="mail_host"> <?= $_mail->marker_tag() ?> <?= $_mail->error_tag() ?> </div>
'mail_head' => REQ(), 'mail_host' => REQ(), '_mail' => GLUE('@', 'mail_head','mail_host') -> MAIL(),
また、data-fk-with
属性を使うことで、入力連動グループ化せずにサブバリデート化することもできます。
<div> <input type="text" name="mail_head" data-fk-with="_mail"> @ <input type="text" name="mail_host" data-fk-with="_mail"> <?= $_mail->marker_tag() ?> <?= $_mail->error_tag() ?> </div>
他に使えるサブバリデート用のメソッドは、バリデートメソッドを参照してください。
郵便番号自動入力
外部JavaScriptとして、ajaxzip3を利用した郵便番号自動入力が可能です。郵便番号の入力要素またはグループタグに data-fk-ajaxzip
属性を設定することで、郵便番号を入力しフォーカスが移動した際に都道府県・住所の途中まで自動的に挿入されます。
<div> <div data-fk-group="_zip" data-fk-ajaxzip="'zip1','zip2','pref','address1'"> 〒 <input type="text" name="zip1" size="4" value="<?= $zip1 ?>"> - <input type="text" name="zip2" size="4" value="<?= $zip2 ?>"> <?= $_zip->marker_tag() ?>(例:000-0000) </div> 都道府県 <select name="pref"> <option value="">(1つ選択して下さい)</option> <?= \FK\pref_options_tag($pref) ?> </select> <?= $pref->marker_tag() ?> <?= $pref->error_tag() ?> <br> 市区町村/番地 <input type="text" name="address1" value="<?= $address1 ?>"> <?= $address1->marker_tag() ?> <?= $address1->error_tag() ?> <br> 建物名/階など <input type="text" name="address2" value="<?= $address2 ?>"> <?= $address2->marker_tag() ?> <?= $address2->error_tag() ?> </div>
尚、data-fk-ajaxzip
属性に設定する値ですが、ajaxzip3の引数と同じ構成にしてますので、例えば郵便番号入力欄が2つでなく1つにまとまっている場合は、 data-fk-ajaxzip="'zip','','pref','address1'"
で対応できます。
リアルタイムバリデートJavaScriptにフックする
入力要素を変更・フォーカスアウト、またはフォームを送信しようとした際にリアルタイムバリデートが発生しますが、それぞれの処理ポイントで独自の関数を実行させることができ、自作JSとの連帯しやすくなっています。以下、フック可能な一覧とサンプルです。
フックポイント | 解説 |
---|---|
$fk.hook.on_init_before | 初期設定前 |
$fk.hook.on_init_after | 初期設定完了時 |
$fk.hook.on_form_submit_before | フォーム送信ボタン押下時(引数は対象のformオブジェクト) |
$fk.hook.on_form_submit_after | フォーム送信直前(引数は対象のformオブジェクト) |
$fk.hook.on_form_send | フォーム送信完了時(引数は対象のformオブジェクト) |
$fk.hook.on_ajax_before | リアルタイムバリデートAjax通信前(引数は送信するデータオブジェクト) |
$fk.hook.on_ajax_after | リアルタイムバリデートAjax通信完了時(引数はAjaxの返り値:Deferred Objectオブジェクト) |
~ <script src="formkit/app/fk.js"></script> <script> function formkit_config(){ // フォーム送信ボタン押下時(引数は対象のformオブジェクト) $fk.hook.on_form_submit_before = function(form){ // ここに処理 }; // フォーム送信直前(引数は対象のformオブジェクト) $fk.hook.on_form_send = function(form){ // ここに処理 }; // フォーム送信完了時(引数は対象のformオブジェクト) $fk.hook.on_form_submit_after = function(form){ // ここに処理 }; // リアルタイムバリデートAjax通信前(引数は送信するデータオブジェクト) $fk.hook.on_ajax_before = function(senddata){ // ここに処理 }; // リアルタイムバリデートAjax通信完了時(引数はAjaxの返り値:Deferred Objectオブジェクト) $fk.hook.on_ajax_after = function(defer){ // ここに処理 }; } </script>
ちなみに、上記のように formkit_config()
関数を定義すると、fk.js
ロード完了後に処理を実行できます。
formaction属性について
この formaction
属性は、送信ボタンが押された時に、指定されたURLに <form>
タグの action
属性を書き換えてから送信するというものです。
<div class="submit"> <button formaction="index.php?revalidate">前の画面へ</button> <button formaction="thanks.php">送信する</button> </div>
formaction
属性はHTML5から `<input>` タグで記述できるようになったものですが、fk.js
をロードすることで、IEの古いバージョンでも、 <button>
タグにでも書けるようになります。