フォームで jQuery Validation Plugin を使用しています。フォームに「電話」フィールドと「モバイル番号」があります。フィールド。
ユーザーがそれらのいずれかを入力する必要があるように、どのように作成しますか?
これは、使用する必要があるもののように見えます dependency-callback
これにより、次のことが可能になります。
指定されたコールバックの結果に応じて、要素を必須にします。
次に、関数コールバックからの戻りに基づいてのみ必要となる2つの電話フィールドにrequired
検証ルールを配置できます。したがって、モバイルフィールドが空白の場合にのみこのルールを要求するように電話フィールドにルールを設定し、モバイルフィールドの場合はその逆を行うことができます。
これはテストされていませんが、理論的には
rules: {
telephone: {
required: function(element) {
return $("#mobile").is(':empty');
}
},
mobile: {
required: function(element) {
return $("#telephone").is(':empty');
}
}
}
更新された回答の可能性については、コメント/その他の回答を必ず確認してください。
[〜#〜] update [〜#〜]
rules: {
telephone: {
required: '#mobile:blank'
},
mobile: {
required: '#telephone:blank'
}
}
これを行う正しい方法は、「require_from_group」メソッドを使用することだと思います。
http://jqueryvalidation.org/require_from_group-method/ で確認できます
例はまさにあなたが探しているものです:
<input class="left phone-group" id="mobile_phone" name="mobile_phone">
<input class="left phone-group" id="home_phone" name="home_phone">
<input class="left phone-group" id="work_phone" name="work_phone">
<script>
$( "#form" ).validate({
rules: {
mobile_phone: {
require_from_group: [1, ".phone-group"]
},
home_phone: {
require_from_group: [1, ".phone-group"]
},
work_phone: {
require_from_group: [1, ".phone-group"]
}
}
});
</script>
Additional-methods.jsを含めることが必須です
同じ答えを探してここに来ました。上記の投稿は非常に役に立ちました。ありがとう。
このソリューションを拡張して、単に「空ではない」のではなく、他のフィールドが実際に有効かどうかを確認しました。これにより、モバイルフィールドから「必須」クラスを削除する前に、ユーザーが有効な電話番号を入力することが保証されます。逆も同様です。
Mobile: {
required: function(element) {
return (!$("#Phone").hasClass('valid'));
}
},
Phone: {
required: function(element) {
return (!$("#Mobile").hasClass('valid'));
}
}
要件は、検証がCまたは(AおよびB)のいずれかである必要があることです。私のために働いたことは:
$.validator.addMethod("multipeFieldValidator", function(value) {
var returnVal = false;
if($("#Cfield").val() != '' || ($("#Afield").val() != '' && $("#Bfield").val() != '')) {
returnVal = true;
}
return returnVal;
}, 'Either C or A and B is required');
$('#Afield.form-control').change(function(){
$(this).valid();
$("#Bfield").valid();
$("#Cfield").valid();
});
$('#Bfield.form-control').change(function(){
$(this).valid();
$("#Afield").valid();
$("#Cfield").valid();
});
$('#Cfield.form-control').change(function(){
$(this).valid();
$("#Bfield").valid();
$("#Afield").valid();
});
within rules I have
Afield: "multipeFieldValidator",
Bfield: "multipeFieldValidator",
Cfield: "multipeFieldValidator"
$(document).ready(function () {
jQuery.validator.addMethod("mobile10d", function (value, element) {
return this.optional(element) || /^[7-9]{1}[0-9]{9}$/.test(value);
}, "Please enter a valid 10 digit phone number.");
$("#form_id").validate({
rules: {
mobile: {
required: "#telephone:blank",
mobile10d: true
},
telephone: {
required: "#mobile:blank",
mobile10d: true
}
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>
<form class="" action="" method="POST" id="form_id">
<div class="col-md-4 form-group">
<label class="form-control">Mobile<span class="required">*</span></label>
<input class="form-control" type="text" name="mobile" id="mobile" placeholder="0-9">
</div>
<div class="col-md-4 form-group">
<label class="form-control">Telephone<span class="required">*</span></label>
<input class="form-control" type="text" name="telephone" id="telephone" placeholder="0-9">
</div>
<div class="form-group">
<input type="submit" name="" value="Submit" class="apply-now-btn">
</div>
</form>
問題があったのは.is(':empty')
なので、ここに私の作業オプションの例を示します。
前:
rules: {
name: {required: true},
email: {required: true},
phone: {required: true}
}
すべてのフィールドwereは必須です。しかし、メールや電話が必要だったので、「または」を作成しました。
rules: {
name: {required: true},
email: {required:
function() {
//returns true if phone is empty
return !$("#phone").val();
}
},
phone: {required:
function() {
//returns true if email is empty
return !$("#email").val();
}
}
},
messages: {
email: "Email is required if no phone number is given.",
phone: "A phone number is required if no phone email is given."
}
デフォルトのメッセージでは各フィールドが必須であると表示されるため、ユーザーに意味のある情報を提供するmessages
オプションを追加したことがわかります。これはこの状況では当てはまりません。
これはやる
Mobile: {
required: function(element) {
return (jQuery.isEmptyObject($("#Phone").val()));
}
},
Phone: {
required: function(element) {
return (jQuery.isEmptyObject($("#Mobile").val()));
}
}