ここでは、カスタム minlength と data-equals 属性で、 カスタム time 入力を作ります。 新しい傾向のフォーム開発です。jQuery Tools Validatorは、それを簡単に行うことができます。
ここにあります。新しい属性を持つ HTML5 フォーム:
<form id="myform">
<form id="myform" class="cols">
<h3>カスタム入力を備えたHTML5フォーム</h3>
<fieldset>
<label> email * <input type="email" required="required" minlength="9" /> </label>
<label> username * <input type="text" name="username" minlength="5" /> </label>
<label> Password <input type="password" name="password" minlength="4" /> </label>
<label> Password check <input type="password" name="check" data-equals="password" /> </label>
</fieldset>
<fieldset>
<label> website * <input type="url" required="required" /> </label>
<label> name * <input type="text" name="name" required="required" maxlength="30" /> </label>
<label> age <input type="number" name="age" size="4" maxlength="3" /> </label>
<label> time <input type="time" name="time" maxlength="8" /> </label>
</fieldset>
<div class="clear"></div>
<button type="submit">Submit form</button>
</form>
このツールにより、新しい属性や入力タイプを実装することは非常に簡単です。 各新規属性と入力タイプは、新しいカスタム・バリデータ関数を必要とします。 それらは、$.tools.validator.fn メソッドによって、 バリデータツールに追加されます。
時間入力はHTML5標準に属します。ここでは、それを実装します。 妥当な入力は、2つの数字の後に ":" が続き、その後へまた2つの数字が続きます。例えば: 12:44
// 値が妥当かどうかをテストする正規表現
$.tools.validator.fn("[type=time]", "Please supply a valid time", function(input, value) {
return /^\d\d:\d\d$/.test(value);
});
これは、カスタムバリデータを定義するための最も一般的な方法です。 最初の引数は、検証したいすべての入力に一致します。 ここでは、type 属性が "time" に等しい入力フィールドを選択します。 2番目の引数は、検証が失敗した場合に表示するエラーメッセージです。 3番目の引数は、実際のバリデータ関数で、値が妥当である場合は true を返さなければなりません。 値は、バリデータ関数の2番目の引数へ渡されます。
次のバリデータは、或るフィールドの値が、他のフィールドの値に等しいことを確実にします。 例えば、data-equals="password" は、値が "password" と名付けられたフィールドに 等しくなければならないことを意味しています。 data- 接頭辞は、それを妥当なHTML5にします。
$.tools.validator.fn("[data-equals]", "Value not equal with the $1 field", function(input) {
var name = input.attr("data-equals"),
field = this.getInputs().filter("[name=" + name + "]");
return input.val() == field.val() ? true : [name];
});
ここでは、エラーメッセージ内に後方参照 $1 を見ることができます。 これは、検証に失敗した場合、バリデータ関数の戻り値によって置き換えられます。 ゼロ個以上の後方参照を持つことができ、配列内に含まれる必要があります。 また、バリデータ内の this は、validator APIへの 参照であることに注意してください。
ここでは、非標準の属性 minlength を使用しています。 カスタム属性を作るときは、あなたが好きな任意の属性名を使用することができます。 欠点は、カスタム名がHTML バリデータを通らないということです。しかし、 理想的な世界では、 これはそうであるべきではありません。
$.tools.validator.fn("[minlength]", function(input, value) {
var min = input.attr("minlength");
return value.length >= min ? true : {
en: "Please provide at least " +min+ " character" + (min > 1 ? "s" : ""),
fi: "Kentän minimipituus on " +min+ " merkkiä"
};
});
今回は、エラーメッセージを返すのに、第2引数を使用していません。 これにより、メッセージを動的に構築する可能性が与えられます。 英語と仮定される簡単なな文字列を返すか、または、オブジェクトを返すことができます。
ここでは、$.tools.validator.localizeFn をコールし、入力した時間をローカライズします。
$.tools.validator.localizeFn("[type=time]", {
en: 'Please supply a valid time',
fi: 'Virheellinen aika'
});
ここに、Firebug のコンソールから見た、 バリデータの内部に含まれる全てのメッセージがあります。
カスタムバリデータとローカライズの詳細については、バリデータ・ドキュメント を読んでください。
カスタム・バリデータが定義したら、フォームの検証を初期化します。 offset コンフィギュレーション変数を使用して、エラー メッセージの位置を調整します:
$("#myform").validator({
position: 'top left',
offset: [-12, 0],
message: '' // em element is the arrow
});
HTMLコードの後にスクリプトブロックを置くか、代わりにjQueryの $(document).ready を使用することができます。
<!-- same styling as in minimal setup -->
<link rel="stylesheet" type="text/css"
href="/media/css/validator/form.css"/>
<!-- override it to have a columned layout -->
<link rel="stylesheet" type="text/css"
href="/media/css/validator/columns.css"/>
columns.css での1つの興味深い機能が、CSSだけで作った矢印です。 画像は使用していません。ここに、そのトリックがあります:
/* pure CSS arrow */
.error em {
display:block;
width:0;
height:0;
border:10px solid;
border-color:#FFFE36 transparent transparent;
/* positioning */
position:absolute;
bottom:-17px;
left:60px;
}