入力連動グループ
通常、各項目は入力後にフォーカスが外れるとバリデートが始まります。ところが、複数の入力項目を入力中は同じグループに所属する要素のバリデートを待って欲しい場合があります。この場合、以下のような書き方で、入力状態を連動させることができます。
<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> タグにでも書けるようになります。