2 つ以上のテキスト フィールドがあり、それらに同じプロパティを適用して、同じコードを 2 回以上記述しないようにしたい
これは機能しません:
$("#form").validate({
rules:
{
'name', 'surname':{
required: true,
minlength: 3,
maxlength: 50
}
}
});
何か案は?
2 つ以上のテキスト フィールドがあり、それらに同じプロパティを適用して、同じコードを 2 回以上記述しないようにしたい
これは機能しません:
$("#form").validate({
rules:
{
'name', 'surname':{
required: true,
minlength: 3,
maxlength: 50
}
}
});
何か案は?
私の以前の答えから取る:
この例では、これがベースの開始コードです。
HTML :
<input type="text" name="field_1" />
<input type="text" name="field_2" />
<input type="text" name="field_3" />
jQuery :
$('#myForm').validate({
rules: {
field_1: {
required: true,
number: true
},
field_2: {
required: true,
number: true
},
field_3: {
required: true,
number: true
}
}
});
デモ: http://jsfiddle.net/rq5ra/
オプション 1a) 必要な共通ルールに基づいてフィールドにクラスを割り当て、それらのルールをクラスに割り当てることができます。カスタム メッセージを割り当てることもできます。
HTML:
<input type="text" name="field_1" class="num" />
<input type="text" name="field_2" class="num" />
<input type="text" name="field_3" class="num" />
.rules('add')
メソッド は呼び出し後に呼び出す必要があり、..validate()
.each()
class
jQuery:
$('#myForm').validate({
// your other plugin options
});
$('.num').each(function() {
$(this).rules('add', {
required: true,
number: true,
messages: {
required: "your custom message",
number: "your custom message"
}
});
});
デモ: http://jsfiddle.net/rq5ra/1/
オプション 1b) 上記と同じですが、を使用する代わりにclass
、name 属性の共通部分に一致します。
$('[name*="field"]').each(function() {
$(this).rules('add', {
required: true,
number: true,
messages: { // optional custom messages
required: "your custom message",
number: "your custom message"
}
});
});
デモ: http://jsfiddle.net/rq5ra/6/
オプション 2a) ルールのグループを引き出して、それらを共通の変数に組み合わせることができます。
var ruleSet1 = {
required: true,
number: true
};
$('#myForm').validate({
rules: {
field_1: ruleSet1,
field_2: ruleSet1,
field_3: ruleSet1
}
});
デモ: http://jsfiddle.net/rq5ra/4/
オプション 2b)上記の 2a に関連しますが、複雑さのレベルに応じて、特定のグループに共通するルールを分離し.extend()
、無限の方法でそれらを再結合するために使用できます。
var ruleSet_default = {
required: true,
number: true
};
var ruleSet1 = {
max: 99
};
$.extend(ruleSet1, ruleSet_default); // combines defaults into set 1
var ruleSet2 = {
min: 3
};
$.extend(ruleSet2, ruleSet_default); // combines defaults into set 2
var ruleSet3 = { };
$.extend(ruleSet3, ruleSet1, ruleSet2); // combines sets 2 & 1 into set 3. Defaults are included since they were already combined into sets 1 & 2 previously.
$('#myForm').validate({
rules: {
field_1: ruleSet2,
field_2: ruleSet_default,
field_3: ruleSet1,
field_4: ruleSet3
}
});
最終結果:
field_1
3以上の必須数になります。field_2
必要な数だけになります。field_3
は 99 以下の必要な数になります。field_4
3 から 99 までの必須の数字になります。このように試してください
var ruleSet1 = {
required: true,
minlength: 3,
maxlength: 50
};
$('#form').validate({
rules: {
field_1: ruleSet1,
field_2: ruleSet1,
field_3: ruleSet1
}
});
または、次のように1つずつ実行します。
$("#form").validate({
rules:
{
name: { required: true },
surname:{
required: true,
minlength: 3,
maxlength: 50
}
}
});
CSS クラスをすべてのフィールドに適用する
$(".cssClassName").rules("add", {
required: true,
minlength: 3,
maxlength: 50 ,
messages:
{required:"error1",minlength:"error2",maxlength:"error3"}});
プロパティを変数として定義し、それを使用します。
var name_reqs = {
required: true,
minlength: 3,
maxlength: 50
};
$("#form").validate({
rules: {
'name': name_reqs,
'surname': name_reqs
}
});
明らかにこれを行うにはいくつかの方法がありますが、クラス ルールを使用する場合は次のようになります。
$.validator.addClassRules("name", {
required: true,
minlength: 3,
maxlength: 50
});
次に、次のようにルールを設定できます
$("#form").validate({
rules:
{
firstname : name,
surname : name
}
});
またはクラス名を使用してルールを設定します。
<input id="firstname" name="firstname" class="name">
<input id="surname" name="surnname" class="name">
この方法については、jQuery 検証の一般的なガイドラインのリファクタリング ルールのセクションで説明されています。