Je souhaite déclencher manuellement la validation, notamment l'affichage de messages d'erreur avec jQuery Validate .
Le scénario que j'essaie d'accomplir est une forme comme celle-ci:
<form>
<input id=i1> <button id=b1>
<input id=i2> <button id=b2>
</form>
Lorsque vous cliquez sur b1
, seul i1
doit être validé. Lorsque vous cliquez sur b2
, seul i2
doit être validé. Cependant, tous les champs doivent être postés. Comment puis-je faire ceci? J'ai pensé à la gestion de l'événement click pour b1/b2
et à la validation manuelle d'une partie du formulaire.
Cette bibliothèque semble permettre la validation d'éléments uniques. Associez simplement un événement de clic à votre bouton et essayez ce qui suit:
$("#myform").validate().element("#i1");
Exemples ici:
http://docs.jquery.com/Plugins/Validation/Validator/element#element
Ou on peut simplement utiliser: $('#myElem').valid()
if ($('#myElem').valid()){
// will also trigger unobtrusive validation only for this element if in place
// add your extra logic here to execute only when element is valid
}
Mon approche était comme ci-dessous. Maintenant, je voulais juste que mon formulaire soit validé quand une case spécifique était cochée/modifiée:
$('#myForm input:checkbox[name=yourChkBxName]').click(
function(e){
$("#myForm").valid();
}
)
Comme indiqué dans la documentation , le moyen de déclencher la validation de formulaire par programme consiste à appeler validator.form ()
var validator = $( "#myform" ).validate();
validator.form();
Il existe une méthode non documentée à partir de la version 1.14
validator.checkForm()
Cette méthode valide silencieusement le retour vrai/faux. Cela ne déclenche pas de message d'erreur.
Eva M d'en haut, a presque eu la réponse ci-dessus (Merci Eva M!):
var validator = $( "#myform" ).validate();
validator.form();
C'est presque la solution, mais cela pose des problèmes, même dans le plug-in de validation de jQuery le plus récent à compter du 13 décembre 2018. Le problème est que si l'on copie directement cet échantillon, et si on appelle ".validate ()" plusieurs fois , le traitement cible/clé de la validation peut être interrompu et la validation peut ne pas afficher correctement les erreurs.
Voici comment utiliser la réponse d'Eva M et veiller à ce que ces problèmes de focalisation/clé/dissimulation d'erreur ne se produisent pas:
1) Enregistrez votre validateur dans une variable/globale.
var oValidator = $("#myform").validate();
2) NE PAS appeler $ ("# myform"). Validate () à nouveau.
Si vous appelez $ ("#myform"). Validate () plusieurs fois, des problèmes de focus/clé/masquage d'erreur peuvent survenir.
3) Utilisez la variable/global et le formulaire d’appel.
var bIsValid = oValidator.form();
Il existe un bon moyen d'utiliser validate()
avec les paramètres d'un formulaire et de valider manuellement un champ de votre formulaire par la suite:
var validationManager = $('.myForm').validate(myParameters);
...
validationManager.element($(this));
Documentation: Validator.element ()
j'ai essayé de travailler tnx @Anastasiosyal je veux le partager sur ce fil.
Je ne suis pas sûr de savoir comment les champs de saisie ne se sont pas déclenchés lorsque j'ai vidé les champs. Mais j'ai réussi à déclencher chaque champ requis individuellement en utilisant:
$(".setting-p input").bind("change", function () {
//Seven.NetOps.validateSettings(Seven.NetOps.saveSettings);
/*$.validator.unobtrusive.parse($('#saveForm'));*/
$('#NodeZoomLevel').valid();
$('#ZoomLevel').valid();
$('#CenterLatitude').valid();
$('#CenterLongitude').valid();
$('#NodeIconSize').valid();
$('#SaveDashboard').valid();
$('#AutoRefresh').valid();
});
voici mon avis
@using (Html.BeginForm("SaveSettings", "Settings", FormMethod.Post, new {id = "saveForm"}))
{
<div id="sevenRightBody">
<div id="mapMenuitemPanel" class="setingsPanelStyle" style="display: block;">
<div class="defaultpanelTitleStyle">Map Settings</div>
Customize the map view upon initial navigation to the map view page.
<p class="setting-p">@Html.LabelFor(x => x.NodeZoomLevel)</p>
<p class="setting-p">@Html.EditorFor(x => x.NodeZoomLevel) @Html.ValidationMessageFor(x => x.NodeZoomLevel)</p>
<p class="setting-p">@Html.LabelFor(x => x.ZoomLevel)</p>
<p class="setting-p">@Html.EditorFor(x => x.ZoomLevel) @Html.ValidationMessageFor(x => x.ZoomLevel)</p>
<p class="setting-p">@Html.LabelFor(x => x.CenterLatitude)</p>
<p class="setting-p">@Html.EditorFor(x => x.CenterLatitude) @Html.ValidationMessageFor(x => x.CenterLatitude)</p>
<p class="setting-p">@Html.LabelFor(x => x.CenterLongitude)</p>
<p class="setting-p">@Html.EditorFor(x => x.CenterLongitude) @Html.ValidationMessageFor(x => x.CenterLongitude)</p>
<p class="setting-p">@Html.LabelFor(x => x.NodeIconSize)</p>
<p class="setting-p">@Html.SliderSelectFor(x => x.NodeIconSize) @Html.ValidationMessageFor(x => x.NodeIconSize)</p>
</div>
et mon entité
public class UserSetting : IEquatable<UserSetting>
{
[Required(ErrorMessage = "Missing Node Zoom Level.")]
[Range(200, 10000000, ErrorMessage = "Node Zoom Level must be between {1} and {2}.")]
[DefaultValue(100000)]
[Display(Name = "Node Zoom Level")]
public double NodeZoomLevel { get; set; }
[Required(ErrorMessage = "Missing Zoom Level.")]
[Range(200, 10000000, ErrorMessage = "Zoom Level must be between {1} and {2}.")]
[DefaultValue(1000000)]
[Display(Name = "Zoom Level")]
public double ZoomLevel { get; set; }
[Range(-90, 90, ErrorMessage = "Latitude degrees must be between {1} and {2}.")]
[Required(ErrorMessage = "Missing Latitude.")]
[DefaultValue(-200)]
[Display(Name = "Latitude")]
public double CenterLatitude { get; set; }
[Range(-180, 180, ErrorMessage = "Longitude degrees must be between {1} and {2}.")]
[Required(ErrorMessage = "Missing Longitude.")]
[DefaultValue(-200)]
[Display(Name = "Longitude")]
public double CenterLongitude { get; set; }
[Display(Name = "Save Dashboard")]
public bool SaveDashboard { get; set; }
.....
}
Dans mon cas similaire, j'avais ma propre logique de validation et je voulais simplement utiliser la validation jQuery pour afficher le message. C'est ce que j'ai fait.
//1) Enable jQuery validation
var validator = $('#myForm').validate();
$('#myButton').click(function(){
//my own validation logic here
//.....
//2) when validation failed, show the error message manually
validator.showErrors({
'myField': 'my custom error message'
});
});