Je travaille sur une validation de formulaire en utilisant jQuery, en validant chaque champ surblur. Tout fonctionne bien, sauf quand j'ai groupé des champs (dépendants). Ce que je cherche est un moyen de valider ces champs seulement une fois que tous ont été floutés. Ils peuvent être groupés en tant que collection d'objets jQuery ou enfants d'un élément conteneur.jQuery - flou de champs multiples
Un exemple est une entrée d'anniversaire composé de trois éléments <> sélectionnez:
<fieldset>
<label for="bday_month">Birthday:</label>
<select name="userBirthday[month]" id="bday_month">
<option value="0">Month</option>
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
...
</select>
<select name="userBirthday[day]" id="bday_day">
<option value="0">Day</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
...
</select>
<select name="userBirthday[year]" id="bday_year">
<option value="0">Year</option>
<option value="1991">1991</option>
<option value="1990">1990</option>
<option value="1989">1989</option>
...
</select>
</fieldset>
À l'heure actuelle, la fonction de validation est liée à l'événement flou() de chaque champ. Les champs groupés trouveront leurs dépendants et valideront correctement, mais lors de la tabulation dans les champs, le message d'erreur est affiché parce que l'utilisateur n'a pas fini l'entrée.
J'ai essayé d'ajouter l'événement blur() au fieldset et de lier des événements personnalisés, sans beaucoup de chance.
Pour référence, voici ce que j'ai actuellement la fonction blur():
fieldBlur = function(e){
// Array of objects w/specific validation functions, arguments, etc.
validators = $(this).data('validators');
// Process each validator separately
for(key in validators){
validator = validators[key];
$field = validator.$field;
// Extracts the value from grouped fields as an array
val = valHelper($field);
// Call one of the pre-defined validation functions
functionResponse = eval(validator.options.functionName + "(val, validator.options.functionArgs);");
if(!functionResponse){
validator.$error.find('.text').text(validator.options.errorMsg);
validator.$info.hide();
validator.$error.show();
e.preventDefault();
break; // Only display the first error
} else {
validator.$error.hide();
}
}
return true;
};
Merci à l'avance, et laissez-moi savoir si plus de code/explication serait utile. Reliez l'événement de flou au seul dernier champ.
Pas une mauvaise idée. Ne fonctionnera pas si l'utilisateur tabule en arrière à travers le formulaire, d'où ils utilisent la souris, mais j'aime vraiment la simplicité! – nleach