J'utilise le plugin jQuery Validation sur mon formulaire. Sur mon formulaire, j'ai un champ "Téléphone" et un "Numéro de mobile". champ.
Comment pourrais-je faire en sorte que l'utilisateur doive remplir l'un d'entre eux, mais ce peut être l'un ou l'autre des champs?
Cela ressemble à ce que vous devez utiliser dependency-callback
Ce que cela vous permettra de faire est:
Rend l'élément requis, en fonction du résultat du rappel donné.
Vous pouvez ensuite placer une règle de validation required
sur les deux champs de téléphone qui ne seront requis que sur la base du retour de la fonction callback; Ainsi, vous pouvez définir une règle sur le champ téléphonique pour demander que cette règle ne soit requise que si le champ mobile est vide et inversement pour le champ mobile.
Ceci est non testé mais en théorie
rules: {
telephone: {
required: function(element) {
return $("#mobile").is(':empty');
}
},
mobile: {
required: function(element) {
return $("#telephone").is(':empty');
}
}
}
Assurez-vous de vérifier les commentaires/autres réponses pour les réponses mises à jour possibles.
Je pense que la bonne façon de faire est d'utiliser la méthode "require_from_group".
Vous pouvez vérifier sur http://jqueryvalidation.org/require_from_group-method/
L'exemple est exactement ce que vous recherchez:
<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>
Il est obligatoire d'inclure additional-methods.js
Je suis venu chercher les mêmes réponses. J'ai trouvé le message ci-dessus très utile. Merci.
J'ai étendu cette solution pour vérifier si l'autre champ est en fait valide, plutôt que simplement "pas vide". Cela garantit que l'utilisateur entre un numéro de téléphone valide avant de supprimer la classe "requise" du champ Mobile et inversement.
Mobile: {
required: function(element) {
return (!$("#Phone").hasClass('valid'));
}
},
Phone: {
required: function(element) {
return (!$("#Mobile").hasClass('valid'));
}
}
L'exigence est la validation doit être C ou (A et B) est requis. Ce qui a fonctionné pour moi est:
$.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>
J'ai eu des problèmes avec .is(':empty')
alors voici mon exemple d'options de travail.
Avant:
rules: {
name: {required: true},
email: {required: true},
phone: {required: true}
}
Tous les champs étaient obligatoires. Mais je voulais un email et/ou un téléphone pour créer le 'ou':
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."
}
Et vous verrez que j'ai ajouté l'option messages
pour donner à l'utilisateur des informations utiles, car les messages par défaut indiqueraient que chaque champ est obligatoire, ce qui n'est pas vrai dans cette situation.
Cela fera
Mobile: {
required: function(element) {
return (jQuery.isEmptyObject($("#Phone").val()));
}
},
Phone: {
required: function(element) {
return (jQuery.isEmptyObject($("#Mobile").val()));
}
}